Обработка смайлов

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)
Вот так всегда, не поспишь ночь а под утро зацикливаешься на мелочиD с меня пиво за решение этой задачи))

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);
типа тогоsmile

6. Lugaro (13.04.2010 / 13:40)
4. SNELS точно монах, Да спасибо)) у меня стоит главная задача в том чтоб с легкостью можно было юзать паки смайлов под квип, так то уже всё реализовано и довольно коротко, осталось только ссылки спасти D

7. Lugaro (13.04.2010 / 13:43)
5. ramzes, как домой прийду отвечу) на улице ша

8. ramzes (13.04.2010 / 13:53)
#4, тут в полезных кусках кучу функций писали на смайлы. На порядок лучше чем реплейс на каждый смайл прописыватьsmile

9. Lugaro (13.04.2010 / 15:04)
ramzes (Сегодня / 12:35)
На ум приходит только модификация функции обработки ссылки.. Перед превращением ее в живую ссылку обработать функцией обратной от смайлов $msg = preg_replace('|<img src=\"smiles\/(.*?)\.gif\" alt=\"\" \/>'|i','\1',$msg);
типа тогоsmile
В моем случае так не выйдет.
В обшем задам вопрос немного по другому, помогите составить регулярку чтоб она из
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)
Почему не выйдет? Выйдет, но добавит нагрузки, просто повторно обрабатываешь текст только уже в обратном порядке, картинки в эквивалент из файла превращаешьsmile
про регулярку не понял вопроса..

11. Lugaro (13.04.2010 / 18:00)
Пока с сестрой мелкой на базар ходил проснулось решение D
<?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/
моя версия обработки смайловsmile

URL: https://visavi.net/topics/8154