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:

function pnick_szinezo($p_nick){
	$p_nick = preg_replace("#\[c=(.*?)\](.*?)\[/c\]#si", "<font color=\"\\1\">\\2</font>", $p_nick);
	$p_nick = preg_replace("#\[b\](.*?)\[/b\]#si", "<b>\\1</b>",$p_nick);
	$p_nick = preg_replace("#\[i\](.*?)\[/i\]#si", "<i>\\1</i>",$p_nick);
	$p_nick = preg_replace("#\[u\](.*?)\[/u\]#si", "<u>\\1</u>",$p_nick);
	$p_nick = preg_replace("#\[s\](.*?)\[/s\]#si", "<s>\\1</s>",$p_nick);
	return $p_nick;
}
A user-ek szinezhetik a nick nevüket(like msn).

Ha a user így csinálja meg:

[c=blue]|i|Lon[/c][c=green]g[/c]|/i||s|[c=purple]R[/c][c=red]ifle|/s|[/c]
akkor abból:

<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
$p_nick = preg_replace(
  '#\[c=[^\]]*\](.*?)\[/c\]#si', 
  '<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

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