Обработка смайлов
1.
Lugaro (13.04.2010 / 12:56)
Я для обработки смайлов использую файл C:\Program Files\QIP Infium\Smilies\Animated\_define.ini с квипа, так всё то очень хорошо и удобно, даже без циклов обхожусь, но вот возникает проблема, смайлов то много и страдаю ссылки, есть какие то идеи как сохранить целостность ссылки? регуляркой заменять смайлы не хочется, я вот думаю мажет перед обработкой извлекать все ссылки preg_match_all а потом после обработки смайлов опять брать preg_match_all и выбирать все ссылки но учитывать в них
<img src="/image/smiles/...gif" alt=""/> и делать чтото типа
foreach($url2 AS $key=>$txt){
$msg = str_replace($url2[$key][0], $url2[$key][0], $msg);
}
Но вот незнаю как правильно составить регулярку чтоб извлечь ссылки во второй массив, с учетом что в них может быть <img src="/image/smiles/[0-9].gif" alt=""/>
2.
Lugaro (13.04.2010 / 13:13)
Вот собственно функция кодирования-декодирования смайлав
<?php
function smiles($msg, $back = false)
{
$file = file($_SERVER['DOCUMENT_ROOT'] . '/local/smiles.dat');
$smiles = unserialize($file[0]);
return $back ? strtr($msg, array_flip($smiles)) : strtr($msg, $smiles);
}
?>
3.
Lugaro (13.04.2010 / 13:20)
Вот так всегда, не поспишь ночь а под утро зацикливаешься на мелочи
с меня пиво за решение этой задачи))
4.
Станислав (13.04.2010 / 13:27)
Давай проще выложу тебе набор смайлов и файл кучей str_replace для их вывода =))))
5.
ramzes (13.04.2010 / 13:35)
На ум приходит только модификация функции обработки ссылки.. Перед превращением ее в живую ссылку обработать функцией обратной от смайлов $msg = preg_replace('|<img src=\"smiles\/(.*?)\.gif\" alt=\"\" \/>'|i','\1',$msg);
типа того
6.
Lugaro (13.04.2010 / 13:40)
4.
SNELS точно монах, Да спасибо)) у меня стоит главная задача в том чтоб с легкостью можно было юзать паки смайлов под квип, так то уже всё реализовано и довольно коротко, осталось только ссылки спасти
7.
Lugaro (13.04.2010 / 13:43)
5.
ramzes, как домой прийду отвечу) на улице ша
8.
ramzes (13.04.2010 / 13:53)
#4, тут в полезных кусках кучу функций писали на смайлы. На порядок лучше чем реплейс на каждый смайл прописывать
9.
Lugaro (13.04.2010 / 15:04)
ramzes (Сегодня / 12:35)
На ум приходит только модификация функции обработки ссылки.. Перед превращением ее в живую ссылку обработать функцией обратной от смайлов $msg = preg_replace('|<img src=\"smiles\/(.*?)\.gif\" alt=\"\" \/>'|i','\1',$msg);
типа того
В моем случае так не выйдет.
В обшем задам вопрос немного по другому, помогите составить регулярку чтоб она из
http://test1.ru/forum/?mod=<img src="/image/smiles/001.gif" alt=""/>dd текс
Выбирала
http://test1.ru/forum/?mod=<img src="/image/smiles/001.gif" alt=""/>dd
но с учетом что ссылка может быть просто
http://test1.ru/forum/?mod=dd т.е и обычную она должна брать и с тегом картинки
10.
ramzes (13.04.2010 / 16:35)
Почему не выйдет? Выйдет, но добавит нагрузки, просто повторно обрабатываешь текст только уже в обратном порядке, картинки в эквивалент из файла превращаешь
про регулярку не понял вопроса..
11.
Lugaro (13.04.2010 / 18:00)
Пока с сестрой мелкой на базар ходил проснулось решение
<?php
function smiles($msg, $back = false)
{
$file = file($_SERVER['DOCUMENT_ROOT'] . '/local/smiles.dat');
$smiles = unserialize($file[0]);
if(!$back){
//Делаем дам ссылок
preg_match_all('#(http(s)?://).*?(\s|$)#si', $msg, $url);
$msg = preg_replace('#((http(s)?://).*?(\s|$))#si', '<link>', $msg);
//Обработка
$msg = strtr($msg, $smiles);
//Востанавливаем покацаные ссылки
preg_match_all('#<link>#i', $msg, $url2);
$msg = str_replace($url2[0], $url[0], $msg);
}else{
//Декодирование
$msg = strtr($msg, array_flip($smiles));
}
return $msg;
}
?>
12.
ramzes (13.04.2010 / 20:18)
http://wb-fx.smartoff.net/blogpost/PHP-class-obrabotki-smajlov/
моя версия обработки смайлов
URL:
https://visavi.net/topics/8154