Autor Zpráva
Quagmire
Profil *
Dobrý den.
Mám na svém webu něco jako vzkazník (návštěvní kniha, guestbook - jak chcete) , kam návštěvníci mohou přidat vzkaz, který je následně uložen do MySQL databáze a pak zase vypsán. Abych zabránil případnému HTML vstupu do vzkazníku, zpracovávaný text od návštěvníka jsem projel funkcí htmlspecialchars. Tak ale uživatel přijde o veškeré možnosti formátování textu.

Chtěl bych se tedy zeptat, jak udělám, aby některé formátování textu mohl uživatel použít, aniž by narušil strukturu webu? Napadlo mě, že by uživatel do vzkazníku mohl zadávat např. [ b ] tučně [ / b ] apod, zkrátka podobný systém jako je zde na fóru. A pak pomocí funkce str_replace by se [ b ] nahradilo za <b>, [ /b ] za </b> apod.
Pak se ale může stát, že uživatel zapomene [ / b ] a zničí tak celý vzhled stránky.

Šlo by tedy, aby skript odstranil z textu [ b ], pokud tam není ukončovací značka?
Šlo by to samé udělat i s odkazy popř. obrázky?
AM_
Profil
Nejjednodušeji se to dělá pomocí regulárních výrazů, např.
$text = preg_replace('~[ b](.*)[ /b]~isU', '<b>\\1</b>', $text);
Keeehi
Profil
Quagmire:
Na překlad z bbcode můžeš použít třeba tuto funkci.
function BBcode($texto){
  $a = array(
    "/\[i\](.*?)\[\/i\]/is",
    "/\[b\](.*?)\[\/b\]/is",
    "/\[u\](.*?)\[\/u\]/is",
    "/\[size=(.*?)\](.*?)\[\/size\]/is",
    "/\[color=(.*?)\](.*?)\[\/color\]/is",
  );
  $b = array(
    "<i>$1</i>",
    "<b>$1</b>",
    "<u>$1</u>",
    "<font size=$1>$2</font>",
    "<font color=$1>$2</font>",
  );

  $texto = preg_replace($g, $h, $texto);
  return $texto;
}
Jdou samozřejmě takto udělat odkazy i obrázky, avšak tam si musíš dát pozor na zabezpečení. (například na útoky XSS)
machus
Profil *
můžete poradit jak přeložit [img] [/img]?
díky
AM_
Profil
machus:
podobným regulárem jako v předchozím příspěvku, jen si ho poupravíš na tag img místo uvedených. A konkrétně IMG se řešilo nesčetněkrát jak tady v diskusi, tak i v celém internetu, budiž ti tedy google dobrým kamarádem.
Machus
Profil *
už to hledám na googlu několik hodin a nemůžu to najít.
Chápu, že se to dá napsat podobným jako v předchozím případě, ale nevím jak.
Nevím jak to napsat, tak aby to bralo odkaz na internet a zároveň cestu na pevném disku.

Napsal bych to takhle, ale nejsem si jist zda to je dobře.
"/\[img\](.*?)\[\/img\]/is"

"<img>$1</img>"

Díky
SpotRudloff
Profil *
Machus:
Nemůžeš mít
<img> a </img>
, ale
<img src="odkaznaobrazek.format">
!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: