Autor Zpráva
Neas
Profil
Ahoj.
Chtěl bych se zeptat, jak je to s podporou regulárních výrazů ve starších verzích php. Na localhostu (php 5.3.1) jsem testoval návštěvní knihu a už fungovala poměrně dobře, rozhodl jsem se tedy uploadnout ji a otestovat na serveru (free hosting ic.cz - php verze: http://kakkoii-fansub.tym.cz/j.php ). Přidání komentářů funguje dobře, avšak pouze do té doby, než uživatel nepoužije smailíka, či BBcode. V takovém případě se příspěvek vůbec nevloží, žádná chybová hláška, nic. Mám podezření, že je chyba v regulárních výrazech, neboť využívám funkce preg_replace a preg_match při nahrazování BBcodů za HTML, avšak myslíte-li, že může chyba tkvět v něčem jiném, budu vděčný za pomoc.
Živá ukázka: http://kakkoii-fansub.tym.cz/?novinka=10
(poznámka: antispam vyhodnocuje jako spam jakýkoli komentář, vložený rychleji, než 4 sekundy)
Děkuji

EDIT: po dalších testech jsem zjistil, že některé BBcody fungují (např. "u"), jiné ne (např "hide")
smailíci nefungují žádní (ty nahrazuji přes str_replace)
snake.aas
Profil *
nahrazuješ při vkládání, nebo při výpisu?
bylo by možné vložit ty reguláry (+ něco okolo ;-))?
Neas
Profil
Nahrazuji rovnou při vkládání komentáře. Ukázka 2 funkcí, které to mají na starost:
public function input_text($string, $format = false)
  {
    return $format ? $this->gpc_addslashes(trim($this->format2html(htmlspecialchars($string)))) : $this->gpc_addslashes(trim(htmlspecialchars($string)));
  }
private function format2html($telo)
  {
    $telo = str_replace("\n", "<br>", $telo);
    $telo = preg_replace("(\[hide\=(.+?), *(.+?)\](.+?)\[\/hide\])", "<div class='bbcode_hide'><input type='button' value='$1' onclick=\"if (this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display != '') { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = ''; this.value = '$2'; } else { this.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0].style.display = 'none'; this.value = '$1'; }\"><div><div style='display:none;' class='bbcode_hidden'>$3</div></div></div>", $telo);
    $telo = preg_replace("(\[b\](.+?)\[\/b\])", "<strong>$1</strong>", $telo);
    $telo = preg_replace("(\[i\](.+?)\[\/i\])", "<em>$1</em>", $telo);
    $telo = preg_replace("(\[u\](.+?)\[\/u\])", "<u>$1</u>", $telo);
    $telo = preg_replace("(\[url\=((https?://|)[a-zA-Z0-9\_\~\!\*\'\|\%\:\+\-]{1,255}\.[a-zA-Z0-9\_\~\!\*\'\|\%\:\+\-]{1,255}\.[a-zA-Z0-9]{2,4}\/?[a-zA-Z0-9\_\~\!\*\'\|\%\:\+\=\$\;\@\,\#\-]*)\](.+?)\[/url\])", "<a href='$1' title='$3'>$3</a>", $telo);
    $telo = preg_replace("@ ((https?://|)[a-zA-Z0-9\_\~\!\*\'\|\%\:\+\-]{1,255}\.[a-zA-Z0-9\_\~\!\*\'\|\%\:\+\-]{1,255}\.[a-zA-Z0-9]{2,4}\/?[a-zA-Z0-9\_\~\!\*\'\|\%\:\+\=\$\;\@\,\#\-]*)@", " <a href='$1' title='$1'>$1</a>", $telo); // RV, co sem našel předtim na netu: "@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@"
    $telo = preg_replace("(\[img\](.+?)\[/img\])", "<img src='$1' alt='$1'>", $telo);
    $telo = preg_replace("(\[left\](.+?)\[\/left\])", "<div style='text-align:left;'>$1</div>", $telo);
    $telo = preg_replace("(\[youtube\]([a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\']*)\[/youtube\])", "<center><object width='445' height='364'><param name='movie' value='http://www.youtube.com/v/$1&fs=1&color1=0x006699&color2=0x54abd6&border=1'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param><embed src='http://www.youtube.com/v/$1&fs=1&color1=0x006699&color2=0x54abd6&border=1' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='445' height='364'></embed></object></center>", $telo);
    $telo = preg_replace("(\[center\](.+?)\[\/center\])", "<center>$1</center>", $telo);
    $telo = preg_replace("(\[right\](.+?)\[\/right\])", "<div style='text-align:right;'>$1</div>", $telo);
    $telo = preg_replace("(\[blok\](.+?)\[\/blok\])", "<div style='text-align:justify;'>$1</div>", $telo);
    $telo = preg_replace("(\[list\](.+?)\[\/list\])", "<ul>$1</ul>", $telo);
    while(preg_match("~(\[\*\](.+?)\[\*\])~", $telo))
    {
      $telo = preg_replace("(\[\*\](.+?)\[\*\])", "<li>$1</li>[*]", $telo);
      $telo = preg_replace("(\[\*\](.+?)<li>)", "<li>$1</li>[*]", $telo);
      $telo = preg_replace("(\[\*\](.+?)\</li>)", "<li>$1</li>", $telo);
    }
    $telo = preg_replace("(\[\*\](.+?)<\/ul>)", "<li>$1</li></ul>", $telo);
    $telo = str_replace("<ul><br>", "<ul>", $telo);
    $telo = str_replace("</ul><br>", "</ul>", $telo);
    $telo = str_replace("<br></ul>", "</ul>", $telo);
    $telo = str_replace("<li><br>", "<li>", $telo);
    $telo = str_replace("<br><li>", "<li>", $telo);
    $telo = str_replace("</li><br>", "</li>", $telo);
    $telo = str_replace("<br></li>", "</li>", $telo);
    $telo = preg_replace("(\[code\](.+?)\[\/code\])", "<code><pre>$1</pre></code>", $telo);
    $telo = preg_replace("(\[quote\](.+?)\[\/quote\])", "<blockquote>$1</blockquote>", $telo);
    $telo = preg_replace("(\[color\=([a-fA-F0-9]{6})\](.+?)\[\/color\])", "<font color='#$1'>$2</font>", $telo);
    $telo = preg_replace("(\[color\=(black|navy|green|teal|maroon|purple|olive|silver|gray|blue|lime|aqua|red|fuchsia|yellow|white)\](.+?)\[\/color\])", "<font color='$1'>$2</font>", $telo);
    $telo = str_replace("*blush*", "<img src='img/Emoticons/Blush.gif' alt='V rozpacích'>", $telo);
    $telo = str_replace("*drop*", "<img src='img/Emoticons/Drop.gif' alt='Kapka'>", $telo);
    $telo = str_replace("*happy*", "<img src='img/Emoticons/Happy.gif' alt='Šťastný'>", $telo);
    $telo = str_replace(" :3", "<img src='img/Emoticons/Kakkoii.gif' alt='Kakkoii'>", $telo);
    $telo = str_replace(" :D", "<img src='img/Emoticons/Smile.gif' alt='Usmívá se'>", $telo);
    $telo = str_replace(" :O", "<img src='img/Emoticons/Suprised.gif' alt='Šokovaný'>", $telo);
    $telo = str_replace(" oO", "<img src='img/Emoticons/WTF.gif' alt='WTF'>", $telo);
    return $telo;
  }

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