


Подскажите как правильно реализовать замену текстовых смайлов на графические PHP
str_replace не предлагать.
как сделать так чтобы с заменялись все смайлики а не только одни какие-то. Например нам нужно менять
$text1=preg_replace("@(\:\)|\:\-\))+@", '<img src="smail/1.gif">',$mytext); веселые
$text1=preg_replace("@(\:\(|\:\-\()+@", '<img src="smail/2.gif">',$mytext); грустные
Имеется код:
<?PHP header("Content-Type: text/html; charset=utf-8");?>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<?php
// Проверка на цвет
// Убираем тэги из сообщений +
// Вставляем графические смайлы
function random_color()//Функция изменения цвета
{
return sprintf( "#%02X%02X%02X", rand(0, 255), rand(0, 255), rand(0, 255) );//Тело функции
}
$fp = fopen("log_v2.0.txt", "r"); // Открываем файл в режиме чтения
if ($fp) //Если открытие удачно идем дальше. Иначе смотрим Else
{
$users = array();//Создаем ассоциативыный массив
while (!feof($fp))//Пока не конец файла выполняем тело цикла
{
$mytext = fgets($fp);
//$pf=preg_replace("@(\:\)|\:\-\))+@", '<img src="smail/1.gif">',$mytext.'<br/>');
//$pf=preg_replace("@(\:\(|\:\-\()+@", '<img src="smail/2.gif">',$mytext.'<br/>');
if (preg_match("@^(.*?):(.*?)$@i",$mytext, $matches))/*preg_match — Выполняет проверку на соответствие регулярному выражению,
в нашем случае мы ищем с начала строки :
. (точка) – один произвольный символ, кроме \n,
* – повторяется 0 или большее число раз подряд
? – 1 или 0 раз
matches В случае, если указан дополнительный параметр matches, он будет заполнен результатами
поиска. Элемент $matches[0] будет содержать часть строки, соответствующую вхождению
всего шаблона, $matches[1] - часть строки, соответствующую первой подмаске, и так далее.
*/
$name = $matches[1];// Создаем переменну и приравниваем ей значения $matches [1]
if (!isset($users[$name]))/*isset — Определяет, была ли установлена переменная значением отличным от NULL. Проверяем есть-ли для нашего логина
переменная. */
$users[$name] = random_color(); //Присваиваем цвет логину.
/*if (in_array ( random_color() , $users ))
{
$users[$name] = random_color();
}
*/
$message = $matches[2]; //Создаем переменную и приравниваем ей значения $matches [2]
$pf=preg_replace("@(\:\)|\:\-\))+@", '<img src="smail/1.gif">',$matches[2]);
echo '<span style="/*color*/background:'.$users[$name].'">'.$name.'</span>'.':'.$pf.'<br/>';// Выводим [Логин]: [Сообщение]
}
}
else echo "Ошибка при открытии файла";// Если файл не получилось открыть, то выводим ошибку
fclose($fp);//Закрываем наш файл
?>
.
.
Текстовый файл:
Максим: Привет! :) :) :) :-)
Дмитрий87:Привет! Как дела? :)
Максим: Норм. Вот сижу. :-) :-) :-)
Дарья: Охохохо: хо хо хо
Максим: А утебя как? :(
Дмитрий87:Вот и я сижу.. .
Дарья: Охохохо: хо: хо
Максим: Ну :( :( не плохо так-то!
Дмитрий87:Это да. :)
Максим: Пока: )
Дмитрий87:До :) встречи!!! )
☹☺☻