RV
HackForum

| ahoj,
mám takový problém. Potřebuji vytvořit odstavce z textu za pomoci
netisknutelných znaků. Tedy, příklad textu je:
"
Nějaký hezký text
\r\n\r\n
Nějaký hezký text
\r\n\r\n
navrtává konstrukci textu dalšího.
"
a regulární výraz pro převedení všech odstavců kromě posledního je:
$this->str = preg_replace("#(.*)\r\n\r\n#","<p>$1& lt;/p>", $this->str);
Příklad se převede na
"
<p>Nějaký hezký text</p><p>Nějaký hezký text</p>navrtává konstrukci textu
dalšího.
"
otázka zní, jak převést poslední kus textu "navrtává..."
vycházím z předpokladu, že ta poslední část bude začínat </p> a následně ji od
těch ostatních rozliším tak, že se v něm nebude nacházet </p>
k mému zklamání to ovšem nefunguje jak si představuji.
$this->str = preg_replace("#</p>(.*[ˇ</p>])# ","<p>$1</p>", $this->str);
po tom co to proženu tímto vypadá html takto:
"<p>Nějaký hezký text<p><p>Nějaký hezký text</p></p>navrtává konstrukci textu
dalšího."
což je úplná blbost:(.
Nemůžu si s tím RV poradit, nevíte jak na to? Díky.
----------
[link]
[link]
Někdy kokot kokotem není, někdy je to prostě jenom pták. (odpovědět) | qteck | | | 364250869 | 7.12.2011 17:54 |
|
|
|
| Ja bych to pres explode() rozsekal do pole a pak to proste cyklem projel a poskladal:
$vysledek.="<p>".$pole."</p>"; (odpovědět) | StorM Troop3r | 89.190.52.* | 7.12.2011 18:22 |
|
|
|
| Argh...
Zabit!
$vysledek.="<p>".$pole!i!."</p> ";
! si nahrad za hranaty zavorky... Se mi to v predchozim postu prevedlo jako BB kod.... (odpovědět) | StorM Troop3r | 89.190.52.* | 7.12.2011 18:24 |
|
|
|
| tak máš pravdu, možnost takového řešení existuje, ale proč nepoužít elegantnější kód v podobě RV s preg_replace a ušetřit tak pár řádků.
navíc, mě podoba toho regulárního výrazu zajímá, nicméně, pokud to dnes nevyřeším udělám to jak říkáš.
Takže pokud má někdo nějaký nápad sem s tím :-).
Díky.
----------
[link]
[link]
Někdy kokot kokotem není, někdy je to prostě jenom pták. (odpovědět) | qteck | | | 364250869 | 7.12.2011 18:49 |
|
|
|
| Ahoj, Peťo
function odstavce($text) {
preg_match_all("~.*[^\s]+.*~", $text, $match);
$match = array_map("trim", $match[0]);
$match = implode("</p><p>", $match);
return trim($match) == "" ? "" : "<p>$match</p>" ;
}
(odpovědět) | kolarcz...... | 90.179.26.* | 7.12.2011 19:12 |
|
|
|
| Díky to je pro mě ideální řešení :-).
----------
[link]
[link]
Někdy kokot kokotem není, někdy je to prostě jenom pták. (odpovědět) | qteck | | | 364250869 | 7.12.2011 19:28 |
|
|
|