ugrás a tartalomhoz

preg_replace-el idézőjel és backslash kezelése

Jazoja · 2011. Szep. 8. (Cs), 03.30
Kis preg_replace segítségre lenne szükségm.
Klienstől kapott html adatokból szeretnék szanálni.
Nevezetesen az img tag-ben szereplő
width="598"
-at (és társait) próbálom eltüntetni, de az idézőjel és backslash miatt kicsit elakadtam.

A problémát kicsit nehezíti, hogy mikor a szerveren kiíratom a megfelelő változót, akkor abban extra backslash-ek vannak:
width="\"598\""
Utoljára már ezzel próbálkoztam:
preg_replace('/width=[\\"][\\\\][\\"]([0-9])*[\\\\][\\"][\\"]/', "valami", $content);
A [:punct:],[:digit:] kifejezésekre a szerver hibát dobott (valami POSIX-ot emlegetett benne, nem jegyeztem meg)
 
1

Szöveg konstansba mindig

pp · 2011. Szep. 8. (Cs), 07.04
Szöveg konstansba mindig dupla backslash kell. Legalább is jobban jársz, ha ezt az ökölszabályt elfogadod. Mert bár tény, hogy néha működik akkor is ha nem követed ezt a szabályt, de ha követed akkor mindig működik.

Az agyad pörögjön értelmesebb dolgokon annál mint, hogy kell-e dupla, avagy sem, amikor a dupla mindig működik.

Nos nézzük mit is keresel:

szövegesen

A width="\" szöveg, majd egy szám ([0-9]* vagy, ha nem lehet üres akkor [0-9]+), majd a \"" szöveg.

A minta

/width="\"[0-9]*\""/

A mintában a \ jelenek speciális szerepe van(\w szókarakterek, \d számkarakter stb.), ezért escapelni kell, tehát:

/width="\\"[0-9]*\\""/

Figyeljoad, hogy ez még csak a minta, amit át kell adni a preg_replace-nek. Ezt most beírjuk a PHP-ba, tehát lesz belőle egy szöveg konstans, most jön a fenti szabály (köré tettem az aposztrófot, hogy még világosabb legyen a váltás):

'/width="\\\\"[0-9]*\\\\""/'

és már meg is vagyunk.

pp
2

Nem működik

Jazoja · 2011. Szep. 8. (Cs), 20.46
Köszönöm a segítséget, de sajnos nem működik.
Így néz ki a sorom:
preg_replace('/width="\\\\"[0-9]*\\\\""/', "", $content);
Ezzel viszont sikerült ideiglenesen megoldalni a problémát: (nem tökéletes, de célnak megfelel)
preg_replace('/width=[0-9\\\"]*/', "", $content);