Сейчас я использую эту функцию для смайликов:Лучший способ заменить смайлики в PHP?
function emoticons($text) {
$icons = array(
':)' => '<img src="/images/blank.gif" alt="smile" class="icon_smile" />',
':-)' => '<img src="/images/blank.gif" alt="smile" class="icon_smile" />',
':D' => '<img src="/images/blank.gif" alt="smile" class="icon_laugh" />',
':d' => '<img src="/images/blank.gif" alt="laugh" class="icon_laugh" />',
';)' => '<img src="/images/blank.gif" alt="wink" class="icon_wink" />',
':P' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':-P' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':-p' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':p' => '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
':(' => '<img src="/images/blank.gif" alt="sad face" class="icon_sad" />',
':o' => '<img src="/images/blank.gif" alt="shock" class="icon_shock" />',
':O' => '<img src="/images/blank.gif" alt="shock" class="icon_shock" />',
':0' => '<img src="/images/blank.gif" alt="shock" class="icon_shack" />',
':|' => '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
':-|' => '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
':/' => '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
':-/' => '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />'
);
return strtr($text, $icons);
}
Но если ввести ссылку :/
часть http://
заменяется:
То же с кодом (4 места перед каждой строки, чтобы создать поле кода), но по какой-то причине заменяется простым : (0)
Есть ли лучшее решение для этого, чем замена всех значков, подобных этому? Очевидно, что это не работает. Я много искал в Google и не нашел лучшего способа. Я также попытался помещать пробел перед каждым смайликом в ассоциативном массиве выше, но это не работает, если вы просто вводите :) без чего-либо перед этим.
+1 для границ слов - но в случае с 'http: // www' не будет 'http' быть словом и'/'границей слов, поэтому':/'все равно будет фильтроваться? – Tim
На самом деле, я забираю это назад - +1 для ['preg_quote'] (http://php.net/preg_quote), это потрясающе! – Tim
Итак, я поместил это в свою функцию вместо использования 'strtr()'? ** Редактирование: ** Хм, по какой-то причине никакие значки теперь не превращаются в изображения. Интересно, есть ли способ заставить текстовые смайлики превращаться в образы в кодовые окна? – Nathan