2013-07-26 110 views
1

我有這樣的代碼:的preg_match和UTF-8 PHP使包括hashtag

$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 #مصر 
+0

http://3v4l.org/DmXGf我沒有看到任何問題。你確定你保存你的文件爲utf-8嗎? – bwoebi

+0

@bwoebi是的,我確定 –

+0

你的解釋器也在使用utf-8嗎?或者它在iso-8859-1模式下工作? – bwoebi

回答

1

採取一切在UTF-8我們用這個[^ \"\n\r\t<]*

0

我知道爲時已晚,只是爲別人知道

我修改這個功能,使之允許阿拉伯字符

如休耕

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 هاشتاج لازم اشوفهم في الداتا بيز