我有一个帖子系统,我想支持链接和哈希标签。问题是某些链接包含#,本身,并且代码尝试将链接中的#转换为更多链接!
用户可能会发布“http://somelink.com#hashKeyword #hashtag
”
这是我正在使用的代码。我认为它有效,除非链接包含主题标签。
$theText = "http://somelink.com#hashKeyword #hashtag";
//Convert links
$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
if(preg_match($reg_exUrl, $theText, $url)) {
$theText = preg_replace($reg_exUrl, '<a href="'.$url[0].'">'.$url[0].'</a>', $theText);
}
//Convert hash tags
$theText = preg_replace("/#(\w+)/", '<a href="linktohashtag/#$1">#$1</span>', $theText);
非常感谢任何帮助!
答案 0 :(得分:1)
通过使用HamZa's comment和answer on this question,我能够解决问题。
我只是将hashtag正则表达式格式化为仅查找位于空格或帖子开头之后的标记。这样,它们就不会与普通链接发生冲突。
/(^|\s)#([A-Za-z_][A-Za-z0-9_]*)/
这是新的最后一行代码:
$theText = preg_replace("/(^|\s)#([A-Za-z_][A-Za-z0-9_]*)/", '$1<a href="linktohashtag/#$2">#$2</span>', $theText);
效果很好!谢谢大家的讨论!
答案 1 :(得分:0)
听起来你正试图用一个公式得到两个不同的结果,即X = 1,X = 2 ......但是X不能同时等于1和2。你需要做出选择并实施不同的东西。
通常,URL中的#
会尝试在HTML dom中找到包含匹配id属性的元素。因此http://www.example.com/index.php#who-are-we
将打开索引页面,然后将浏览器视图转移到元素<h1 id="who-are-we">
。这可能是任何HTML元素,我在这个例子中只使用了h1。
关于在您的网站上创建链接,您可能希望创建一个解析它们的脚本,使它们对URL友好。因此,如果帖子标题是How to work with twitter #hashtags
,您的脚本将用连字符替换空格,并删除所有非字母数字或空格。因此,您会获得how-to-work-with-twitter-hashtags
之类的链接。