Невозможно изменить текст на изображение, используя preg_replace

Я пытаюсь преобразовать текст в строке в смайлики. Я попробовал и преуспел на полпути.

Проблема:
Когда я заменяю символы в строке на смайлики, такие символы, как «: /» в ссылке http://mywebsite.com также заменяется.

Что я делал до сих пор:

chat.php

<?php
require('common.php');
if($_POST && !empty($_POST['title'])){
$result = $db->add_news($_POST['title']);
}
$text="";
function parseSmiley($text){
//Smiley to image
$smileys=array('o:)'=>'angel.gif', ':3'=>'colonthree.gif', 'o.O'=>'confused.gif', ":'("=>'cry.gif', '3:)'=>'devil.gif', ':('=>'frown.gif', ':O'=>'gasp.gif', '8)'=>'glasses.gif', ':D'=>'grin.gif', ">:-("=>'grumpy.gif', '<3'=>'heart.gif', '^_^'=>'kiki.gif', ':*'=>'kiss.gif', ':v'=>'pacman.gif', ':)'=>'smile.gif', '-_-'=>'squint.gif', '8|'=>'sunglasses.gif', ':p'=>'tongue.gif', ':/'=>'unsure.gif', '>:-O'=>'upset.gif', ';)'=>'wink.gif');

//Now you need to find and replace
foreach($smileys as $smiley=>$img){
$text=str_replace(htmlspecialchars($smiley), "<img src='emotions-fb/{$img}'/>", $text);
}
//Now only return it
return $text;
}
?>

db.php

function get_news(){
if($result = $this->db->query('SELECT * FROM news WHERE id<>1 ORDER BY add_date DESC LIMIT 50')){
$return = '';
while($r = $result->fetch_object()){
$timing=explode(" ", $r->add_date);

$return .= '<p>'.wordwrap(htmlspecialchars($r->title), 25, "\n", true).'</p>';
//$return .='<p>'.$timing[1].' on '.$timing[0].'</p>';
$return .= '<hr/>';
}
return $return;
}
}

После этого я искал на stackoverflow и получил что-то вроде этого, но это не заменяет текст на изображение

    foreach($smileys as $smiley=>$img){
$smiley=preg_quote($smiley);
$text=preg_replace("~\b$smiley\b~", "<img src='emotions-fb/{$img}'/>", $text);

}

Я не знаю, где я иду не так.
Заранее спасибо.

0

Решение

Пытаться:

$smileys=array('o:)'=>'angel.gif', ':3'=>'colonthree.gif', 'o.O'=>'confused.gif', ":'("=>'cry.gif', '3:)'=>'devil.gif', ':('=>'frown.gif', ':O'=>'gasp.gif', '8)'=>'glasses.gif', ':D'=>'grin.gif', ">:-("=>'grumpy.gif', '<3'=>'heart.gif', '^_^'=>'kiki.gif', ':*'=>'kiss.gif', ':v'=>'pacman.gif', ':)'=>'smile.gif', '-_-'=>'squint.gif', '8|'=>'sunglasses.gif', ':p'=>'tongue.gif', ':/'=>'unsure.gif', '>:-O'=>'upset.gif', ';)'=>'wink.gif');
$text='Some example text with smile :/ ^_^ and :\'( and link <a href="http://google.com"> my site :/</a>';
foreach ($smileys as $smiley => $img)
{
$smiley = preg_quote( $smiley );
$text = preg_replace( "#(?<=\s|^)(?:$smiley)(?=\s|$)?#i", '<img src="emotions-fb/'. $img .'">', $text);
}
echo $text;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]