转换函数中文本的微笑和链接

时间:2013-10-15 12:02:30

标签: php str-replace

我正在尝试将表情符号转换为图像并链接到函数中的锚点 我尝试了10次以上但无法解决 我是php的新手。

这是我的代码:

 <?php
 $text = "hey :/  Theere is 2 links andc3 smiles in this text  http://google.com   then    trun nto http://yahoo.com";


function cust_text($string)
{
$content_array = explode(" ", $string);
$output = '';

foreach($content_array as $content)
{

// check word starts with http://
if(substr($content, 0, 7) == "http://")
$content = '<a href="' . $content . '">' . $content . '</a>';

//starts word with www.
if(substr($content, 0, 4) == "www.")
$content = '<a href="http://' . $content . '">' . $content . '</a>';

$output .= " " . $content;

}
output = trim($output);

$smiles = array(':/'  => 'E:\smiles\sad.jpg');
foreach($smiles as $key => $img) {

$msg =   str_replace($key, '<img src="'.$img.'" height="18" width="18" />',       $output);}

return $msg;
}

echo cust_text($text); 

?> 

结果表情符号正在替换:/ http:// 请帮助 提前谢谢: - )

2 个答案:

答案 0 :(得分:0)

改变这个: $ smiles = array(':/'=&gt;'E:\ smiles \ _ sad.jpg');

在这: $ smiles = array(':/'=&gt;'E:\ smiles \ _ sad.jpg');

注意笑脸前后的空间。现在它将不再匹配http:/ any。

答案 1 :(得分:0)

您可以使用正则表达式解决此问题:

改变这个:

$msg =   str_replace($key, '<img src="'.$img.'" height="18" width="18" />',       $output);

进入这个:

$msg = preg_replace('~'.preg_quote($key).'(?<!http:/)~', '<img src="'.$img.'" height="18" width="18" />', $output);

但我必须说,对于初学者来说,这不是最简单的解决方案。

这在正则表达式中使用“负向lookbehind”表达式。这与字符串替换大致相同,区别在于它回头查看:/不是http:/的一部分 这两个字符是正则表达式的起始和终结者。如果你想制作一个包含〜的笑脸,你需要像这样逃避它:\〜

您可以使用str_replace修复此问题:

$key =   str_replace('~', '\~', $key);