Autor Zpráva
kchrz
Profil
Dobrý den.
Udělal jsem si redakční systém na stránky na bázi phpBB. Používám poté překlad prostředí pomocí preg_replace. Nic složitého ... $s = preg_replace("/\[U\](.*?)\[\/U\]/","<u>\\1</u>",$s); atd...
nicméně se mi nedaří přeložit toto
[LIST]
[*]xx[/*]
[*]xx[/*]
[/LIST]

Napsal jsem si funkci
$s = preg_replace("/\[LIST\](.*?)\[\/LIST\]/","<ul>\\1</ul>",$s);
$s = preg_replace("/\[*\](.*?)\[\/*\]/","<li>\\1</li>",$s);
ale jasi mi to nefunguje. Kde je prosim chyba?
díky moc kchrz
gaminn
Profil *
Neměla by být ta dvězdička v druhém regulárním výrazu escapovaná?
kchrz
Profil
nevim přesně, jak to myslíš. Navíc on mi nefunguje ani ten překlad pro [LIST]
gaminn
Profil *
V tom LISTu by žádná chyba být neměla, až na tom druhém řádku:

$s = preg_replace("/\[\*\](.*?)\[\/\*\]/","<li>\\1</li>",$s);
K.
Profil *
gaminn má pravdu a ohledně té chyby v listu.... podobný problém jsem měl v tomto tematu.

Stačí na konec toho regulár přidat přepínač Single line, protože ten text máš na více řádcích. Takže ve výsledku to může vypadat nějak takhle:


$s="[LIST]
[*]xx[/*]
[*]xx[/*]
[/LIST]";

$s = preg_replace("/\[LIST\](.*?)\[\/LIST\]/s","<ul>\\1</ul>",$s);
$s = preg_replace("/\[\*\](.*?)\[\/\*\]/s","<li>\\1</li>",$s);

echo $s;
kchrz
Profil
Díky, už to funguje,ale má to stále jednu chybičku. Mám zvlášť fci, která mi vyvolává všechny tyto úpravy textu na bold,underilne,italic ... list. Jedna z nich je ale nl2br();
Takže se mi sice položky změní, nicméně na za každým <li></li> následuje <br>. Pořeboval bych ještě vymazat uvnitř komplexu [LIST] ... [/LIST] všechny odrážky na nový řádek.
kchrz
Profil
Řekl bych, že jsem to vyřešil. Jen si nejsem jist, zda li odstatečně elegantně :
$s = preg_replace("/\[\*\](.*?)\[\/\*\]/s","<li>\\1</li>",$s);
$s = preg_replace("/\[LIST\](.*?)\[\/LIST\]/s","<ul>\\1</ul>",$s);
$s = str_replace("<ul><br />", "<ul>", $s);
$s = str_replace("</li><br />", "</li>", $s);
return $s;
Každopádně všem moc děkuji za rady
Toto téma je uzamčeno. Odpověď nelze zaslat.

0