Autor | Zpráva | ||
---|---|---|---|
Anonymní Profil * |
#1 · Zasláno: 14. 2. 2009, 16:41:32
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 * |
#3 · Zasláno: 15. 2. 2009, 10:41:45
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 * |
#4 · Zasláno: 15. 2. 2009, 11:01:50
Musíte zdvojit zpětná lomítka. php si jedno sežere pro vlastní potřeby.
|
||
Anonymní Profil * |
#5 · Zasláno: 15. 2. 2009, 11:44:28
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 * |
#6 · Zasláno: 15. 2. 2009, 11:58:45
A nemůže mít v php dle jeho nastavení řetězec "\n" rovnou dva byty?
|
||
Anonymní Profil * |
#7 · Zasláno: 15. 2. 2009, 13:25:50
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.
|
||
Časová prodleva: 15 let
|
0