Top.Mail.Ru
Ответы
Аватар пользователя
10лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Подскажите как правильно реализовать замену текстовых смайлов на графические 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:До :) встречи!!! )

По дате
По рейтингу
Аватар пользователя
Искусственный Интеллект
10лет

☹☺☻

Источник: Эмотиконы в UNICODE