PHP 阿拉伯语的标签不能是 link

PHP Hashtag for arabic can not be a link

我有这样的标签功能:

$ret = preg_replace('/#(\w+)/','<span class="tag"><a href=//'.$host.'/hashtag?key=>[=12=]</a></span>',$ret); 

如果post喜欢:

I like this #verymuch

那么#verymuch 将是:http://example.com/hashtag?key=verymuch 并成为 link。 直到这个工作完美。

但是当我输入阿拉伯语标签时。示例:

I like #أكل

主题标签 #أكل 不应该是 link。

如何将其设置为阿拉伯语也link?

你可以使用:

$ret = preg_replace('/#([^\s]+)/','<span class="tag"><a href=//'.$host.'/hashtag?key=>[=10=]</a></span>',$ret);

但我认为 url 中的阿拉伯符号不起作用。

\w 将只匹配 a-z、A-Z、0-9,包括 _(下划线)字符,但不包括阿拉伯符号。

这似乎对我有用,只需稍作修改:

<?php

$host = 'some.host.site';

//$subject = 'I like this #verymuch';
$subject = 'I like this #أكل';
$pattern = '/#(\w+)/u';
$replace = '<span class="tag"><a href=//'.$host.'/hashtag?key=>[=10=]</a></span>';

var_dump(preg_replace($pattern, $replace, $subject));

输出为:

string(90) "I like this <span class="tag"><a href=//some.host.site/hashtag?key=أكل>#أكل</a></span>"

请注意,我在您的正则表达式模式中添加了 u 修饰符。这会将正则表达式引擎切换为使用 unicode 模式。鉴于更换似乎工作得很好。