Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Převod z textových smajlíků na grafické

Dobrý den, zdravím vás :-)

Mám dotaz, jak již název napovídá - potřebuji převést textové smajlíky na grafické (zkoušel jsem hledat, ale nic zde na poradně jsem nenašel). V souboru, řekněme například index.php lidé příspěvky vkládají, v souboru chat.php se pak zobrazují. Zkoušel jsem googlovat nějaký návod na převod, vygoogloval, ale nerozjel :-( Bude asi lepší, sepsat skript pro převod tam, kde se vypisují data z databáze (soubor chat.php) - viz kód.
Proto vás žádám, zda by jste mi nemohli nějaký skript pro převod textových smajlíků na grafické sepsat.

Zde je můj kód pro výpis (soubor chat.php):

require_once ('../../admin/mysql/mysql.php');

$dotaz = "SELECT *, DATE_FORMAT(datum_prispevku,'%e. %c. %Y v %k:%i') AS datum FROM minichat ORDER BY id_prispevku DESC";

$vysledek = mysql_query ($dotaz);
while ($radek = mysql_fetch_array ($vysledek, MYSQL_ASSOC)) {
  
  echo "<div title='{$radek['datum']}'><div id='autor_chat'><b>{$radek['autor_prispevku']}</b><br/><img src='../../images/chat_pod.jpg' border='0'></div><div>{$radek['obsah_prispevku']}</div><br/></div>";
  }
  
  mysql_close();

Předem moc díky ;-)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Jeden asi ze 127 442 způsobů, jak to udělat :-): $textsmile = array(':-)', ':-('); $graphicsmile =…
marekdrtic 27.05.2009 15:30
marekdrtic
Heh, díky moc :-D (funguje)
MaFis 27.05.2009 15:33
MaFis
Jo jinak pak mi dej odkaz na ten chat, abych ho mohl hacknout, nemáš tam ochranu proti SQL injection…
marekdrtic 27.05.2009 15:34
marekdrtic
No, tak to abych doladil :-)
MaFis 27.05.2009 15:35
MaFis
hint: htmlspecialchars() a ve vkládání mysql_real_escape_string() Jak to používat najdeš na php.net
marekdrtic 27.05.2009 15:36
marekdrtic
dobře, díky ;-)
MaFis 27.05.2009 15:37
MaFis
Abys se s tím nebabral: $textsmile = array(':-)', ':-('); $graphicsmile = array('<img src="smile1.g…
marekdrtic 27.05.2009 15:38
marekdrtic
Ved si mu neescapoval ten $dotaz, to je najvacsie riziko, nie? Je tam nebezpecie SQL injection cez t…
MM.. 27.05.2009 15:42
MM..
Ale IMHO to dokáže pomoci, když nemá ošetřen ten vstup proti <script> atd. Je jasné, ať si přes to d…
marekdrtic 27.05.2009 15:46
marekdrtic
Ano urobit to na vsetko, nielen text prispevku, aj meno atd. aj tam moze byt script. Som myslel ze t…
MM.. 27.05.2009 15:56
MM..
Okys ;-) poslední
MaFis 27.05.2009 16:01
MaFis

Jeden asi ze 127 442 způsobů, jak to udělat :-):

$textsmile = array(':-)', ':-(');
$graphicsmile = array('<img src="smile1.gif">', '<img src="smile2.gif">');


require_once ('../../admin/mysql/mysql.php');

$dotaz = "SELECT *, DATE_FORMAT(datum_prispevku,'%e. %c. %Y v %k:%i') AS datum FROM minichat ORDER BY id_prispevku DESC";

$vysledek = mysql_query ($dotaz);
while ($radek = mysql_fetch_array ($vysledek, MYSQL_ASSOC)) {
 $text = $radek['obsah_prispevku'];
$text = str_replace($textsmile, $graphicsmile, $text);
  echo "<div title='{$radek['datum']}'><div id='autor_chat'><b>{$radek['autor_prispevku']}</b><br/><img src='../../images/chat_pod.jpg' border='0'></div><div>{$text}</div><br/></div>";
  }
  
  mysql_close();

Abys se s tím nebabral:

$textsmile = array(':-)', ':-(');
$graphicsmile = array('<img src="smile1.gif">', '<img src="smile2.gif">');


require_once ('../../admin/mysql/mysql.php');

$dotaz = "SELECT *, DATE_FORMAT(datum_prispevku,'%e. %c. %Y v %k:%i') AS datum FROM minichat ORDER BY id_prispevku DESC";

$vysledek = mysql_query ($dotaz);
while ($radek = mysql_fetch_array ($vysledek, MYSQL_ASSOC)) {
 $text = htmlspecialchars($radek['obsah_prispevku']);
$text = str_replace($textsmile, $graphicsmile, $text);
  echo "<div title='{$radek['datum']}'><div id='autor_chat'><b>{$radek['autor_prispevku']}</b><br/><img src='../../images/chat_pod.jpg' border='0'></div><div>{$text}</div><br/></div>";
  }
  
  mysql_close();

Ved si mu neescapoval ten $dotaz, to je najvacsie riziko, nie? Je tam nebezpecie SQL injection cez tie %e %c %Y atd.

Robit htmlsecialchars po vyberani z databazy podla mna uz neni az tak dolezite z hladiska bezpecnosti (resp. jaj to je pre text prispevku = uzivatelsky vstup, takze je dolezite aj to htmlsecialchars, som predpokladal ze htmlsecialchars robi uz pred vkladanim do databazy, bez toho to je fakt emental).

Ano urobit to na vsetko, nielen text prispevku, aj meno atd. aj tam moze byt script. Som myslel ze to robi uz pred vkladanim do DB, ale ano najlepsie je urobit to tesne pred zobrazenim do HTML.

Mal by ale osetrit aj ten SQL $dotaz, predtym ako ho vykona = ochrana proti SQL injection. Napr.
$dotaz = mysql_escape_string($dotaz);
a az potom
$vysledek = mysql_query ($dotaz);

P.S. a aj pri vkladani do DB (aj aj tam je nejaky uzivatelsky vstup v SQL dotaze)

Zpět do poradny Odpovědět na původní otázku Nahoru