Autor Zpráva
Anonymní
Profil *
Zdravim. Riesim teraz taky problem, chcel som si urobit v PHP funkciu ktora mi nahradi konce riadkov z databazy <br />, podobnu nl2br s tym rozdielom, ze jedno zalomenie sa nahradi jednym <br /> a 2 a viac zalomeni sa nahradi "<br /><br />". No tu som narazil na zvlastny problem, kedy mi to z nejakych dovodov nefunguje.
Funkcia vyzerala nasledovne:

    function output_format($input)
    {
        $patterns[0] = '/(\\n){2,}/';
        $patterns[1] = '/\\n/';

        $replacments[0] = "<br /><br />";
        $replacments[1] = "<br />";

        return preg_replace($patterns, $replacments, $input);
    }


Funckia spolieha na to, ze sa prvky poli nahradzuju vo vzostupnom poradi, a ze koniec riadkov je \n. Ten druhy predpoklad pravdepodobne nie je spravny, kedze mi to nefunguje ked nacitam data z databazy. Ked cez to prezeniem ten isty text ulozeny v premennej tak to ide. V podstae som sa chcel spytat ako MySQL uklada konce riadkov, lebo viem ze kazdy operacny system ich uklada inak - unix lf 0x0A, windows crlf, a mac asi cr 0x0D.
Pripadne ci by ste vedeli sklbit do jedneho regularneho vyrazu aby to fungovalo. Vdaka
Kajman_
Profil *
Jak tam konce řádků dáte, tak tam budou. Mysql je už nemění. Nepomůže nepovinný \r?

$patterns[0] = '/(\\n\\r?){2,}/';
Anonymní
Profil *
No inspirovat sa da napriklad tu http://sk.php.net/manual/en/function.nl2br.php#82898

Nakoniec som to prepisal takto:
return preg_replace("/(\r\n|(\n|\r)){2,}/", "<br /><br />", $input);

a v firefoxe regex testeri mi to fungovalo no v php nie. Nerozumiem tomu.

Takze ako konecne riesenie keby to niekto potreboval sa da pouzit aj
return preg_replace("/(<br ?\/?>(\r\n|(\n|\r))){3,}/", "<br /><br />", nl2br($input));

a toto uz konecne funguje.. Keby mi niekto vedel objasnit tu zahadu (kde som urobil chybu) bol by som velmi rad. Matie ma len to ze po dokladnom otestovani v ff regex testeri to robi to co chcem a v php nie..
Kajman_
Profil *
Musíte zdvojit zpětná lomítka. php si jedno sežere pro vlastní potřeby.
Anonymní
Profil *
To som skusal, nepomohlo. V druhom pripade to funguje aj bez zdvojenia. Predpokladal som ze zdvojovat treba iba ked chcem napisat spatne lomitko pred nejakym znakom ktory sa escapuje, napr. \\' . V prikladoch na vyssie uvedenej stranke to tiez nezdvojuju.
Kajman_
Profil *
A nemůže mít v php dle jeho nastavení řetězec "\n" rovnou dva byty?
Anonymní
Profil *
Tomu celkom nerozumiem, ako to myslite? Kde sa to da zistit ako to je nastavene? Ono ja tomu rozumiem tak, ze ked to vnimame ako retazec a napiseme '\n' tak ma dva byty, malo by to byt 0x5C6E. Ale ked to uvazujeme v dvojitich uvodzovkach a aj regularnych vyrazoch tak "\n" v zdrojovom subore sice je 0x5C6E ale intrpret by to mal pochopit ako znak noveho riadku Line Feed teda 0x0A.

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: