如何在 PHP 中获取没有特殊字符的 UTF-8 标签
How to get UTF-8 Hashtags without special chars in PHP
我在仅提取像 ä,ö,ü,ß
这样的 UTF-8 字母时遇到了问题(比如在单词中使用的字母),而没有像 !"§$%&/()+'
等字符
function getHashtags($string)
{
$string = html_entity_decode($string, ENT_QUOTES, "utf-8");
preg_match_all('/(\#)([^\s]+)/u', $string, $matches);
if ($matches) {
$hashtagsArray = array_count_values($matches[0]);
$hashtags = array_keys($hashtagsArray);
$hashtagLine = '';
foreach ($hashtags as $hashs) {
$hashs = strtolower(trim($hashs));
$hashtagLine .= $hashs;
}
}
return $hashtagLine;
}
这是我目前的解决方案,它接收一个字符串文本并从中提取主题标签,然后 returns 将它们排成一行。问题是,使用此解决方案,主题标签也像 #example!"$/%
一样被处理(而不是像 #example
那样在 !
之前被剪切)。
是否有人有一种(正则表达式)方法可以从 PHP 中的字符串中干净地提取 twitter 之类的 UTF-8 主题标签,而没有那些不需要的标点符号?
使用 unicode 属性:
preg_match_all('/#(\p{L}+)/u', $string, $matches);
\p{L}
代表任何语言的任何字母。
你可以使用下面的正则表达式
$regex = "(?:#)([\p{L}\p{N}_](?:(?:[\p{L}\p{N}_]|(?:\.(?!\.))){0,28}(?:[\p{L}\p{N}_]))?)";
它的工作原理类似于 Facebook 和 Instagram 主题标签。
github 中的要点:https://gist.github.com/khanzadimahdi/2ecfe1ba38860db132b4543ab5126926
并使用以下链接进行测试:
我在仅提取像 ä,ö,ü,ß
这样的 UTF-8 字母时遇到了问题(比如在单词中使用的字母),而没有像 !"§$%&/()+'
等字符
function getHashtags($string)
{
$string = html_entity_decode($string, ENT_QUOTES, "utf-8");
preg_match_all('/(\#)([^\s]+)/u', $string, $matches);
if ($matches) {
$hashtagsArray = array_count_values($matches[0]);
$hashtags = array_keys($hashtagsArray);
$hashtagLine = '';
foreach ($hashtags as $hashs) {
$hashs = strtolower(trim($hashs));
$hashtagLine .= $hashs;
}
}
return $hashtagLine;
}
这是我目前的解决方案,它接收一个字符串文本并从中提取主题标签,然后 returns 将它们排成一行。问题是,使用此解决方案,主题标签也像 #example!"$/%
一样被处理(而不是像 #example
那样在 !
之前被剪切)。
是否有人有一种(正则表达式)方法可以从 PHP 中的字符串中干净地提取 twitter 之类的 UTF-8 主题标签,而没有那些不需要的标点符号?
使用 unicode 属性:
preg_match_all('/#(\p{L}+)/u', $string, $matches);
\p{L}
代表任何语言的任何字母。
你可以使用下面的正则表达式
$regex = "(?:#)([\p{L}\p{N}_](?:(?:[\p{L}\p{N}_]|(?:\.(?!\.))){0,28}(?:[\p{L}\p{N}_]))?)";
它的工作原理类似于 Facebook 和 Instagram 主题标签。
github 中的要点:https://gist.github.com/khanzadimahdi/2ecfe1ba38860db132b4543ab5126926
并使用以下链接进行测试: