我正在尝试将表情符号转换为图像并链接到函数中的锚点 我尝试了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:// 请帮助 提前谢谢: - )
答案 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);