PHP bir regex kullanarak HTML niteliklerini değiştirme

3 Cevap php

Tamam, ben bir DOM ayrıştırıcı kullanmak gerektiğini biliyorum, ama bu bir sonraki özellik konseptinin bir kanıtı bazı kod saplama için, bu yüzden çabuk test kod sınırlı sette bazı işlevler almak istiyorum.

Ben parçaları HTML genişlik ve yükseklik özelliklerini şerit için çalışıyorum, başka bir deyişle, yerine

width="number" height="number"

boş bir dizeyle.

Ben şu anda bu gibi görünüyor yazmaya çalışıyorum fonksiyonu:

function remove_img_dimensions($string,$iphone) {
    $pattern = "width=\"[0-9]*\"";
    $string = preg_replace($pattern, "", $string);

    $pattern = "height=\"[0-9]*\"";
    $string = preg_replace($pattern, "", $string);

    return $string;
}

Ama çalışmıyor.

Bunu nasıl iş yapabilirim?

3 Cevap

Regexes Python, Java ve C # gibi dize hazır formunda belirtilen olmasına rağmen PHP, bu en önemli dilleri arasında eşsizdir, Perl, JavaScript ve Ruby gibi regex sınırlayıcı kullanmak zorunda.

Çift tırnak ve ters eğik çizgi gibi karakterler kaçmak ihtiyacını azaltmak için tek tırnak yerine çift tırnak kullanabilirsiniz, çok, farkında olun. Çift tırnakla için kaçan kurallar şaşırtıcı olabilir çünkü, içine almak için iyi bir alışkanlık.

Son olarak, basit bir münavebe ile bir içine iki değiştirmeleri birleştirebilirsiniz:

$pattern = '/(width|height)="[0-9]*"/i';

Sizin desen başlangıç ​​/ bitiş desen karakterini gerekiyor. Bu gibi:

$pattern = "/height=\"[0-9]*\"/";
$string = preg_replace($pattern, "", $string);

(Ne olursa olsun, "# model #" "| | model") "/" olağan bir karakter ama en karakterler çalışacak.

Dizesinde bir düzenli ifade çevreleyen gerekir | Ben (ya da karakterlerin çeşitli diğer çiftleri | / / olabilir) parantez eksik düşünüyorum. Bu forma $ desen atamaları değiştirmeyi deneyin:

$pattern = "/width=\"[0-9]*\"/";

... Bir harf duyarsız karşılaştırma yapabilmek istiyorsanız, eklemek bir 'i' dolayısıyla, dizenin sonunda:

$pattern = "/width=\"[0-9]*\"/i";

Hope this helps! David