ugrás a tartalomhoz

Valid html BBcode-al

Tanul0 · 2009. Szep. 24. (Cs), 18.15
Sziasztok!

Nos ismét egy problémába ütköztem:
  1. function pnick_szinezo($p_nick){  
  2.     $p_nick = preg_replace("#\[c=(.*?)\](.*?)\[/c\]#si""<font color=\"\\1\">\\2</font>"$p_nick);  
  3.     $p_nick = preg_replace("#\[b\](.*?)\[/b\]#si""<b>\\1</b>",$p_nick);  
  4.     $p_nick = preg_replace("#\[i\](.*?)\[/i\]#si""<i>\\1</i>",$p_nick);  
  5.     $p_nick = preg_replace("#\[u\](.*?)\[/u\]#si""<u>\\1</u>",$p_nick);  
  6.     $p_nick = preg_replace("#\[s\](.*?)\[/s\]#si""<s>\\1</s>",$p_nick);  
  7.     return $p_nick;  
  8. }  
A user-ek szinezhetik a nick nevüket(like msn).

Ha a user így csinálja meg:
  1. [c=blue]|i|Lon[/c][c=green]g[/c]|/i||s|[c=purple]R[/c][c=red]ifle|/s|[/c]  
akkor abból:
  1. <font color="blue"><i>Lon</font><font color="green">g</font></i><s><font color="purple">R</font><font color="red">ifle</s></font>  
És ez egyáltalán nem valid. Hogyan tudnám megoldani, hogy valid legyen?
 
1

<i>

Poetro · 2009. Szep. 25. (P), 01.13
Csak tudám hogy került oda az a <code><i></code> ugyanis az egész szövegben nem szerepel a <code>[i]</code>.
Lehet valid HTMLre hozni ugyanakkor a HTML Purifier-rel.
Azt azért hozzátenném, hogy túl megengedő vagy a [c] kezelésével, nekem jobban tetszene egy
<code>"#\[c=[^\]]*\](.*?)\[/c\]#si"</code> forma, mert véleményem szerint kifejezőbb, ugyanakkor semmiképpen nem ajánlom a <font> elem használatát, inkább akkor már
  1. $p_nick = preg_replace(  
  2.   '#\[c=[^\]]*\](.*?)\[/c\]#si',   
  3.   '<span style="color: $1">$2</span>'$p_nick);  
2

az <i> úgy került oda, hogy

Tanul0 · 2009. Szep. 25. (P), 10.54
az <i> úgy került oda, hogy van [i] tag is a codeba, csak mivel itt ebben a fórumban is lehet bbcodeot használni, ezért átírtam |i| -re
3

Megoldva

Tanul0 · 2009. Szep. 25. (P), 11.18
  1. function pnick_szinezo($p_nick){  
  2.     $p_nick = preg_replace('#\[c=(.*?)\](.*?)\[/c\]#si','<span style="color:\\1;">\\2</span>'$p_nick);   
  3.     $p_nick = preg_replace('#\[b\](.*?)\[/b\]#si''<span style="font-weight:bold;">\\1</span>',$p_nick);  
  4.     $p_nick = preg_replace('#\[i\](.*?)\[/i\]#si''<span style="font-style:italic;">\\1</span>',$p_nick);  
  5.     $p_nick = preg_replace('#\[u\](.*?)\[/u\]#si''<span style="text-decoration:underline;">\\1</span>',$p_nick);  
  6.     $p_nick = preg_replace('#\[s\](.*?)\[/s\]#si''<span style="text-decoration:line-through;">\\1</span>',$p_nick);  
  7.     return $p_nick;  
  8. }  
Köszönöm szépen! Így már valid!