Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Проблема с заменой в строке подстрокой


Автор: Gold Dragon 27.12.2011, 07:57
есть таблица со смайлами. структура такая:
Код

INSERT INTO `jsmilies` (`id`, `image`, `text`) VALUES
(1, 'smile.gif', ':)'),
(2, 'sad.gif', ':('),
(3, 'bo.gif', ':green:'),
(5, 'angel.gif', ':ang:'),
(6, 'blum.gif', ':-D'),
(7, 'wink.gif', ';-D'),
(8, 'dirol.gif', 'B-)'),
(9, 'diablo.gif', ']:->'),
(10, 'rolleyes.gif', ':-S'),
(11, 'blush.gif', ':-/');


загоняю всё в ассоциативный массив
Код

foreach ($rows as $row) {
    $smiluies[$row->text] = '<img alt="' . $row->text . '" src="/images/smilies/' . $row->image . '" />';
}


парсю текст
Код

$text = strtr($text, $smiluies);


Всё отлично, но кроме смайла "дьявола" (ID=9). Смотрю по тексту, видимо экранируется в ключе знак "больше".
Попробовал применить htmlspecialchars_decode(), что-то не особо помогло.

Как решить проблему?

Автор: ayax2005 27.12.2011, 08:07
Замените его на html-последовательность в базе и не мучайтесь

Автор: Absinthe 27.12.2011, 08:21
Цитата

Замените его на html-последовательность в базе и не мучайтесь
 Отвратительный негодный способ, т.к. портит данные, что недопустимо.
При изменении массива смайло вылезет наружу.

Автор: ksnk 27.12.2011, 08:39
Код

foreach ($rows as $row) {
    $smiluies[$row->text] = '<img alt="' . $row->text . '" src="/images/smilies/' . $row->image . '" />';
    $smiluies[htmlspecialchars($row->text)] = '<img alt="' . $row->text . '" src="/images/smilies/' . $row->image . '" />';
}

Автор: Gold Dragon 27.12.2011, 08:53
во как.. а я думал наоборот нужно декодировать smile 
ksnk, спасибо, всё отлично заработало!!!
\
Тема закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)