表情符号用“< 3”替换数组

时间:2013-07-22 12:33:20

标签: php arrays emoticons

我想在我的网站上的聊天中放置一些漂亮的笑脸,但遗憾的是,在我的聊天中放置一个心脏笑脸的“< 3”数组由于某种原因无效,所有其他的工作正常,我认为“<”造成这个问题。但我不知道如何解决这个问题,请看下面的代码:

$patterns = array(':)', ':D', ':p', ':P', ':(', '(aapje)', '8)', '<3');
$replacements = array('<img src="smiles/smile.gif"/>', '<img src="smiles/bigsmile.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/sad.png"/>', '<img src="smiles/aapje.png"/>', '<img src="smiles/nerd.png"/>', '<img src="smiles/love.png"/>');

$message = str_replace($patterns, $replacements, $message);

代码更新

$patterns = array(':)', ':D', ':p', ':P', ':(', '(aapje)', '8)', '/</3', '(l)');
         $replacements = array('<img src="smiles/smile.gif"/>', '<img src="smiles/bigsmile.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/sad.png"/>', '<img src="smiles/aapje.png"/>', '<img src="smiles/nerd.png"/>', '<img src="smiles/love.png"/>', '<img src="smiles/love.png"/>');
         $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
         $blankexp = "/^\n/";
         $message = htmlentities(strip_tags($_POST['message']), ENT_QUOTES);

         if (!preg_match($blankexp, $message)) {

             if (preg_match($reg_exUrl, $message, $url)) {
                $message = preg_replace($reg_exUrl, '<a href="'.$url[0].'" target="_blank">'.$url[0].'</a>', $message);
             } 
             $message = str_replace($patterns, $replacements, $message);

Thx和Grts。

3 个答案:

答案 0 :(得分:4)

可能是<符号所致。试试<的html实体 - 使用&lt;

以下代码应该有效:

$message = htmlspecialchars("Love Smiley <3");
$patterns = array(':)', ':D', ':p', ':P', ':(', '(aapje)', '8)', '&lt;3');
$replacements = array('<img src="smiles/smile.gif"/>', '<img src="smiles/bigsmile.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/sad.png"/>', '<img src="smiles/aapje.png"/>', '<img src="smiles/nerd.png"/>', '<img src="smiles/love.png"/>');

$message = str_replace($patterns, $replacements, $message);

echo $message;

答案 1 :(得分:1)

尝试将<更改为&lt; - 我想您的代码正在尝试将其后的任何内容解析为标记。

答案 2 :(得分:0)

使用&lt;代替<

$message = htmlspecialchars("I love you!!! <3 <3 <3"); // defining message

$patterns = array(':)', ':D', ':p', ':P', ':(', '(aapje)', '8)', '&lt;3');
$replacements = array('<img src="smiles/smile.gif"/>', '<img src="smiles/bigsmile.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/sad.png"/>', '<img src="smiles/aapje.png"/>', '<img src="smiles/nerd.png"/>', '<img src="smiles/love.png"/>');    
$message = str_replace($patterns, $replacements, $message);

echo $message;