facebook风格的主题标签系统,preg_replace错误

时间:2014-09-15 14:16:58

标签: php preg-replace

我已经检查了基于facebook hashtag系统的教程,在插入此代码后,我注意到preg_replace函数中存在一个错误,使链接可以点击。

<?php

function convert_clickable_links($message) {
$parsedMessage = preg_replace(array('/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»""'']))/', '/(^|[^a-z0-9_])@([a-z0-9_]+)/i', '/(^|[^a-z0-9_])#([a-z0-9_]+)/i'), array('<a href="$1" target="_blank">$1</a>', '$1<a href="">@$2</a>', '$1<a href="index.php?hashtag=$2">#$2</a>'), $message);
return $parsedMessage;
}
$message = '#test #test #test this is a hashtag test';
echo convert_clickable_links($message);
?>

由于某种原因在Dreamweaver中我收到语法错误,当我上传代码时,我收到零帖子因为功能被破坏了。我似乎无法弄明白。想知道是否有人可以提供帮助。

1 个答案:

答案 0 :(得分:1)

这些

<>?«»""'']

应更改为<>?«»“”‘’]

完整(固定)线:

$parsedMessage = preg_replace(array('/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))/', '/(^|[^a-z0-9_])@([a-z0-9_]+)/i', '/(^|[^a-z0-9_])#([a-z0-9_]+)/i'), array('<a href="$1" target="_blank">$1</a>', '$1<a href="">@$2</a>', '$1<a href="index.php?hashtag=$2">#$2</a>'), $message);

启用error reporting会抛出:

  

解析错误:语法错误,意外&#39;]))/&#39;&#39; (T_CONSTANT_ENCAPSED_STRING),期待&#39;)&#39;在第4行的/index.php中


HTML来源:

<a href="index.php?hashtag=test">#test</a> <a href="index.php?hashtag=test">#test</a> <a href="index.php?hashtag=test">#test</a> this is a hashtag test

OP:

  

它已经通过逃避你已经孤立的角色 - ,<>?«»""\'\']

来解决

转出单引号,解决了问题。

,<>?«»""\'\']