Autor Zpráva
Majk2
Profil *
Ještě jednou zdravím :)
Potřeboval bych ještě jednu radu s tím jak nejlépe vyřešit příspěvky do guestbooku, chtěl bych aby byl kompatibilní s bbcode phpbbfora, takže dejme tomu že uživatel zapíše třeba

bla bla [color=#000000]bla bla[/color] a editor by měl pak toto nahradit za bla bla <span style="color: #000000">bla bla</span>
Jak toho nejlépe docílit? Na nahrazování sem vždy používal str_replace ale to je v tomto případě nešikovné, zkoušel sem kutit něco s reguléírními výrazy, ale je to pro mě španělská vesnice... jak by měl tedy vypadat výraz co nahradí

[color=#000000]bla bla[/color]

za

<span style="color: #000000">bla bla</span>

?

díky
Mastodont
Profil
Jestli to je kompatibilní, tak by možná stačilo to najít ve zdrojáku phpbbfóra, ne?
Jack Finger
Profil
Majk2
používáme, osvědčené:
function BBColor($text){    
  $from = Array("/\[color=([a-zA-Z]+|#[0-9a-f]+)\]/i", "/\[\/color\]/i");
  $to = Array("<span style=\"color: \\1;\">", "</span>");
  $text = preg_replace($from, $to, $text);
  $rozdil = eregi("<span>", $text) - eregi("</span>", $text);
  if($rozdil > 0){
    for($i = 0;$i <= $rozdil;$i++){
      $text .= "</span>";
    }
  }
  return $text;
}
Majk2
Profil *
Jestli to dobře chápu tak první ([a-zA-Z]+|#[0-9a-f]+) se uloží do //1 kdyby tam byl další ([a-zA-Z]+|#[0-9a-f]+) tak //2 ?
Jack Finger
Profil
Majk2
ne, preg_replace() přepisuje všechny výskyty (v jakémsi "interním cyklu"). \\1 znamená "obsah první závorky"
Majk2
Profil *
Proč mi nefunguje toto?

$from = Array("\[B\]", "\[/B\]");
$to = Array("<B>", "</B>");
$text = preg_replace($from, $to, $text);

tohle to vyhodí


Warning: preg_replace(): Delimiter must not be alphanumeric or backslash in /srv/www/okinfo.cz/subdomains/sk/funkce.php on line 77

Warning: preg_replace(): Delimiter must not be alphanumeric or backslash in /srv/www/okinfo.cz/subdomains/sk/funkce.php on line 77

myslel sem si že [ a ] musím vyrušit zpětným lomítkem ale asi to tak není, bez zpětného lomítka to taky nefunguje.. co mám špatně?
Jack Finger
Profil
Majk2
$from = Array("/\[B\]/", "/\[/B\]/");
?

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:

0