2016-12-13 32 views
1

我正在尝试遍历包含法语字符的字符串。我有一系列特定的法国字符,我正在寻找我想要匹配的字符。使用法语字符和匹配的字符串进行迭代

例子:

header("Content-Type: text/html;charset=utf-8"); 
$string = "HÂPPY Ç" ; 
echo $string;//displays correctly 
echo "<br>"; 
$frenchArray = Array('Â','Ç'); 
for($i=0;$i<mb_strlen($string);$i++) 
{ 
    $t = utf8_encode(mb_substr($string,$i,1)); 
    echo "Checking:" . $t . "<br>"; 
    for($x=0;$x<count($frenchArray);$x++) 
    { 
     if($t==$frenchArray[$x]) 
     { 
      echo "Matched: " . $t . " to " . $frenchArray[$x]."<br>"; 
     } 
    } 
} 

这给了我不匹配:

Checking:H 
Checking:Ã 
Checking: 
Checking:P 
Checking:P 
Checking:Y 
Checking: 
Checking:Ã 
Checking: 

我注意到字符不正确显示 “检查:”

好像有东西简单,我在这里失踪,任何帮助表示赞赏!

+1

您可能会发现[PHP的mb_substr文档在这张票据(http://php.net/manual/en/function.mb-substr.php#117764 )有用。实质上,使用mb_substr以这种方式进行循环相当慢。我也想象你的问题与'utf8_encode'有关;即您的原始字符串已经是UTF-8。 –

回答

0

好像我错过了“,'''''''''的'UTF-8'”部分。感谢您链接到文章卢克。

正确的代码应该是:

for($i=0;$i<mb_strlen($string,'UTF-8');$i++) 
{ 
    $t = mb_substr($string,$i,1,'UTF-8'); 
    echo "Checking:" . $t. "<br>"; 
    for($x=0;$x<count($frenchArray);$x++) 
    { 
     if(preg_match('/'.$t.'/',$frenchArray[$x])) 
     { 
      echo "Matched: " . $t . " to " . $frenchArray[$x]."<br>"; 
     } 
    } 
}