preg_match и UTF-8 в PHP делают хэштег
У меня есть этот код:
$text= "#h #gg #مصر";
$get_hash = preg_match_all("/(^|\s)#(\w*[a-zA-Z-أ-إ-آ-ا-ب-ت-ث-ج-ح-خ-د-ذ-ر-ز-س-ش-ص-ض-ط-ظ-ع-غ-ف-ق-ك-ل-م-ن-ه-و-لا-لا-لآ-لأ-لإ-ى-ي-ئ-ة-ء-ؤ_]+\w*)/", $text, $matches);
$array_hash = implode("",$matches[0])."";
$hash = str_replace('#', ', ', $array_hash);
echo "hash (".$hash.")<br />";
echo $text;
Результат:
hash (, h , gg)
#h #gg #مصر
Я хочу такой результат:
hash (, h , gg , مصر)
#h #gg #مصر
2 ответа
Чтобы взять все, что в UTF-8, мы используем это [^ \"\n\r\t<]*
Я знаю, что уже слишком поздно, чтобы другие знали
я изменяю эту функцию, чтобы разрешить арабские символы
как пара
function get_hashtags($string, $str = 1) {
preg_match_all('/#(\w*[a-zA-Z-أ-إ-آ-ا-ب-ت-ث-ج-ح-خ-د-ذ-ر-ز-س-ش-ص-ض-ط-ظ-ع-غ-ف-ق-ك-ل-م-ن-ه-و-لا-لا-لآ-لأ-لإ-ى-ي-ئ-ة-ء-ؤ_]+)/',$string,$matches);
$i = 0;
if ($str) {
foreach ($matches[1] as $match) {
$count = count($matches[1]);
$keywords .= "$match";
$i++;
if ($count > $i) $keywords .= ", ";
}
} else {
foreach ($matches[1] as $match) {
$keyword[] = $match;
}
$keywords = $keyword;
}
return $keywords;
}
использование:
$string = "<p>#عاشت #فلسطين حرة عربية يوجد 2 هاشتاج لازم اشوفهم في الداتا بيز</p>";
$myArray = get_hashtags($string, $str = 0);
$max = sizeof($myArray);
for($i = 0; $i < $max;$i++)
{
echo "#".$myArray[$i]."<br />";
}
echo "$string"
результат
#عاشت
#فلسطين
#عاشت #فلسطين حرة عربية يوجد 2 هاشتاج لازم اشوفهم في الداتا بيز