Preg_replace
Sziasztok!
Azt szeretném megtudni, hogy az alábbi preg_replace fg.-t, mely jelen formájában a nem alfanumerikus karakterek törlését végzi a karakterláncból, hogy lehetne úgy módosítani, hogy a . - / ? , karaktereket ne törölje?Előre is köszönöm a válaszokat!
■ Azt szeretném megtudni, hogy az alábbi preg_replace fg.-t, mely jelen formájában a nem alfanumerikus karakterek törlését végzi a karakterláncból, hogy lehetne úgy módosítani, hogy a . - / ? , karaktereket ne törölje?
$str1 = preg_replace('/[^a-z0-9áéíóöőúüűÁÉÍÓÖŐÚÜŰ ]{1,}/i', '', $str1);
preg_replace('/[^\pL\d\.\-\?]
\pL
Unicode Regular Expressions
\pL - any kind of letter from any language
Majdnem tökéletes, de a /
Itt a jó megoldás:
nehezebb lett volna Poetro
Ha egy stringből el akarom
A következőt mivel bővítsem ki?
Semmilyen
Az oldalon vannak olyan
Pl.:
Ui: arra gondoltam, hogy első körben átírom a komment tag-eket <!-- --> (amelyekben van [ és ]) valami másra, második körben kiszedem a maradék kommenteket (amelyekben nincsenek olyan karakterek), majd egy újabb körben visszaíratom a kicserélt dolgokat.. Ez viszont lassú lenne.
PHP
preg_replace
helyettpreg_replace_callback
-et használsz, és ott csinálsz további ellenőrzéseket a találatra.Az, hogy mennyire terheli a szervert, csak a felhasználáson múlik. A reguláris kifejezések is kifektethetnek egy szervert, ha nem megfelelően használják őket.
Üdv ismét!Mi annak a
Mi annak a megoldásnak a neve (ha van neki), amit fórumokon (pl. ubuntu fórumon) lehet látni, hogy html kódokkal lehet szerkeszteni a tartalmat, de le vannak korlátozva, tehát csak bizonyos tag-eket lehet használni és milyen regex kell ehhez (ha regex kell)?
Jelenleg átalakítom a megfelelő kódokat így:
Hiszem, hogy van ésszerűbb megoldás is, ezért írtam.
strip_tags
At tudod adni parameterkent az engedelyezett tag-eket.
Köszönöm a választ :)
XSS
Még van egy pár dolog, ami
[a-zA-Z0-9] karaktereket engedélyezek, plusz ezekhez kellenek még az "(idézőjel), '(aposztróf) :(kettőspont), ;(pontosvessző), -(kötőjel), =(egyenlő), _(alsó vonal) és maga a vessző is, viszont nem jött össze, hogy működjenek is.
Amit eddig alkottam:
Szerintem ott csak annyi gond
Működik
Így sikerült működésre bírni:
Hogyan lehet kibővíteni a
...hanem így is:
Azt a „működjön” illetve
Mindent leírt.
Adott html tartalomban
A működését olyannak képzelem, mintha php-ban írnám a kódot, tehát:
Jelenleg:$errol[] =
Ötlet, hogy mi lehet a pröblém?
Update: Ha az $erre[] = "date(\\1)";, akkor kiírja az évszámot (Y), de továbbra is van mellette egy hiba:
Update 2: $erre[] = "date('\\1')"; <- teljesen jó
Ezt használva: $pattern[] =
Rekurzív
preg_replace
sok más társához hasonlóan minta-egyezés (és csere) után az előző egyezés végétől folytatja a minta keresését. Emiatt az egymásba ágyazott egyezések kezeléséről neked kell(ene) gondoskodnod. Erre megoldás lehetne az "e" (eval) módosító, amivel kiemeled az egyező mintát, átadod egy másik fv-nek, abban tudod tovább vizsgálni, hogy van-e több egyezés, és ha van, akkor azzal meghívod saját magát. De ezt igazából nagyon nem javaslom neked, mert valószínűleg hamar futnál végtelen ciklusba, vagy hasonló.Inkább ajánlom, hogy HTML (XML) feldolgozásához használd a PHP erre való osztályait (DOM Document, DOM XML functions). Ezekkel "könnyedén" tudod kezelni a teljes DOM-fát, minden gyerekkel együtt, nem kell a "kínai" regexp-ekkel kínlódni. És - nem utolsó sorban - nem hinném, hogy kesze-kusza regexp-ekkel jobb/gyorsabb eredményt tudnál elérni.