Autor Zpráva
Jirik1
Profil *
Ahoj, chtěl jsem se zeptat, zda existuje ekvivalent za str_replace. Str_replace nebere symboly ", *, atd. Moc dík
DarkMeni
Profil
Proč by je nebrala? Jak ji voláš?
Tomáš123
Profil
Jirik1:
Prečítaj si o escapovaní a skús problém vyriešiť svojpomocne: www.pehapko.cz/zakladni-kurz/4-zaklady-syntaxe#retezce

Prípadne sa samozrejme neváhaj opýtať.
Kcko
Profil
Tomáš123:
str_replace není regexp funkce. Nic v ní escapovat nemusí. Nahrazení wildcards v ní funguje naprosto korektně,
netrep blbosti.
Tomáš123
Profil
Kcko:
Nepredznačená úvodzovka v prípade použitia úvodzoviek na obalenie reťazca nebude fungovať.

Nefunkčnosť nahradenia iných symbolov môže byť spôsobená týmto.
Kcko
Profil
Tomáš123:
Pokud trváš na escapování, tak tazatel bude escapovat všechny wildcards což je špatně.
Tomáš123
Profil
Kcko:
Mám pocit, že iba hľadáš kde by si pichol. Ešte raz to teda vysvetlím. Špeciálne symboly z regulárnych výrazov funkcia str_replace() nepotrebuje escapovať a netrvám na tom, aby to tak Jirik1 robil.

Tvrdím, že neescapovaná úvodzovka na nevhodnom mieste vysvetľuje nefunkčnosť súvisiacu s nahradením úvodzovky. A bez bližších informácií predpokladám, že to bude koreňom celého problému.

Akoby som tam napísal, Jirik1 skontroluj si, či escapuješ úvodzovku, ktorú možno používaš na obalenie argumentu. A vieš čo? Rovno si prečítaj o escapovaní, čo to je, na čo sa to používa a skús problém vyriešiť samostatne. Ak by niečo, pýtaj sa.

Považujem to za uzavreté. Už ďalej nerýp.
Kcko
Profil
Tomáš123:
Mám pocit, že iba hľadáš kde by si pichol. Ešte raz to teda vysvetlím. Špeciálne symboly z regulárnych výrazov funkcia str_replace() nepotrebuje escapovať a netrvám na tom, aby to tak Jirik1 robil.
Tak proč nahoře píšeš o escapování?

Kdyby měl ve stringu 2 stejné uvozovky skončilo by to parse errorem. Ach jo, radši to uzavřeme.
Jirik1
Profil *
Uvádím můj příklad:

        $symboly = Array("%", "'", "\"", "<", ">", "--", "#", "´", "°", "\/", "\*", "`", ";", "=", "==", "===");
        $a = '<span style="color: #FB0000; font-weight: bold; font-size: 20px;">';
        $b = '</span>';
        $symboly2 = Array("$a % $b", "$a ' $b", "$a \" $b", "$a < $b", "$a > $b", "$a -- $b", "$a # $b", "$a ´ $b", "$a ° $b", "$a \/ $b", "$a \* $b", "$a ` $b", "$a ; $b", "$a = $b", "$a == $b",
        "$a === $b");
        $vypis = str_replace($symboly, $symboly2, $text);
        echo $vypis;
        
        
DarkMeni
Profil
Ono to ty znaky převede, ale potom při 4. a 5. průchodu převádíš < a >, a tím rozbiješ ten už vytvořený html kód pro první 3 znaky.

Zkus nejdřív převést < a > a ža pak ostatní.
A místo < a > při nahrazení by bylo lepší použít entity (&lt; a &gt;)


A na tohle by možná bylo lepší použít regularní výrazy. Kdyžtak koukni na funkci preg_replace()


A naco tam je "\*" a "\/"? To není potřeba escapovat, jen úvozovky, nebo jestli chceš nahradit tu dvojici, tak kdyžtak už "\\*" a "\\/", jakože neutralizovat escapující znak (zpětné lomítko).
Jirik1
Profil *
Str_replace funguje dobře. Jen je potřeba odstranit html symboly z řádků 2 a 3 (", =, <, >, ;, #). Moc by mi pomohlo, kdyby mi někdo poradil, jak v řádků 2 a 3 přepsat ony symboly tak, aby se nerozbíjel kód.
Kcko
Profil
htmlspecialchars
DarkMeni
Profil
Asi tak. Převedl bych speciální znaky v $textu na entity, a pak nahrazoval ty entity.

A nebo je tu ještě funkce strtr, narazil jsem na ní před chvilkou, ale dělá asi to, co chceš.
<?php
$text = "Ahooj <\"jak\" '; // -- kd ;'je?>";
$a = '<span style="color: #FB0000; font-weight: bold; font-size: 20px;">';
$b = '</span>';
$symboly = array(
    "%"   => "$a % $b",
    "'"   => "$a ' $b",
    "\""  => "$a \" $b",
    "<"   => "$a &lt; $b",
    ">"   => "$a &gt; $b",
    "--"  => "$a -- $b",
    "#"   => "$a # $b",
    "´"   => "$a ´ $b",
    "°"   => "$a ° $b",
    "/"   => "$a / $b",
    "*"   => "$a * $b",
    "`"   => "$a ` $b",
    ";"   => "$a ; $b",
    "="   => "$a = $b",
    "=="  => "$a == $b",
    "===" => "$a === $b",
);

echo strtr($text, $symboly);
?>
Keeehi
Profil
Já bych na to šel regulárními výrazy. Navíc jsem to napsal tak, že pokud následuje více těch nahrazovaných znaků za sebou (případně jsou odděleny bílým znakem) tak je to obalí jako celou skupinu, takže vy výstupu není tolik zbytečných spanů.
<?php
$text = "Ahooj <\"jak\" '; // -- kd ;'je?>";
$encoded = htmlspecialchars($text, ENT_QUOTES);
echo preg_replace('~((&lt;|&gt;|&quot;|&#039;|[%#´`°;/*\\\\]+|--|={1,3})(\s*(&lt;|&gt;|&quot;|&#039;|[%#´`°;/*\\\\]+|--|={1,3}))*)~', '<span style="color: #FB0000; font-weight: bold; font-size: 20px;">$1</span>', $encoded);

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:

0