Autor Zpráva
CarlosK
Profil *
Dobrý den, mám script, který odstraní závorky (<TEXT> => TEXT) a chci aby se výsledek escapoval.

$text = preg_replace('/\<([a-zA-Z])\>/e', htmlspecialchars('${1}'), $text);

Vše funguje jak má, jen výsledek se neescapuje, nevíte proč? Děkuji všem za rady.
TomasJ
Profil
já bych to udělal takto:
$text = preg_replace('/<([a-zA-Z]*)>/e', htmlspecialchars('$1'), $text);
Před < a > nemusíš dávat zpětné lomítko, a * udává libovolný počet písmen a-z a A-Z. Ještě lepší by bylo udělat to takto:
$text = preg_replace('/<(.*)>/e', htmlspecialchars('$1'), $text);
.* znamená Libovolný počet jakýchkoliv znaků.
Tori
Profil
CarlosK:
$text = preg_replace('/\<([^>]*)\>/e', 'htmlspecialchars("$1")', $text);Trochu jsem změnila regulár, na a-zA-Z není co escapovat.
TomasJ
Profil
Proč všichni v regulárech escapují znaky < a > ??? Vždyť to se přece escapovat nemusí ne?
Tori
Profil
TomasJ:
Záleží, kde se to použije, dost věcí (podvýrazy apod.) začíná (?< Nicméně je i funkce preg_quote, která escapuje všechno možné včetně <>, takže autoři to zřejmě považovali za jistější. Konkrétně tady to ale nezbytné nebylo, to máte pravdu.
TomasJ
Profil
Aha, díky za upřesnění.
CarlosK
Profil *
Děkuji za odpovědi. Měl bych ještě jednu otázku. Dá se pomocí regulárních výrazů dosáhnou toho, aby při zadání např.:

<test><ahoj>dobrý den</ahoj></test>

regulární výrazy vrátily pomocí preg_match_all toto:

  0 => //Celý skript
    array
      0 => string '<test><ahoj>dobrý den</ahoj></test>'
      1 => string '<ahoj>dobrý den</ahoj>'
  1 => //Název tagu
    array
      0 => string 'test'
      1 => string 'ahoj'
  2 => //Obsah tagu
    array
      0 => string '<ahoj>dobrý den</ahoj>'
      1 => string 'dobrý den'

Skoušel jsem něco napsat sám, ale nefunguje to jak má: '/<([a-zA-Z]*)><(.*)><\/[a-zA-Z]*>/'.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: