2016-12-13 17 views
1

フレンチ文字を含む文字列を繰り返し処理しようとしています。私は、私が探したい特定のフランス語の文字の配列を持っています。フレンチ文字で文字列を繰り返し照合する

例:

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

私は文字が正しく表示されていないことがわかり、 "チェック:" 私に何の一致を与えない

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>"; 
     } 
    } 
} 

何かがあるよう

らしいです私はここで行方不明のシンプルな、任意の助けに感謝!

+1

あなたは[PHPのmb_substrのドキュメントにこのノート]を見つけるかもしれない(http://php.net/manual/en/function.mb-substr.php#117764 )有用です。基本的に、mb_substrを使ってこのようにループするのはむしろ遅いです。あなたの問題は 'utf8_encode'に関連していると思います。元の文字列はすでにUTF-8です。 –

答えて

0

"mb_"の "UTF-8 '"部分が欠けているようです。記事Lukeにリンクありがとうございました。

正しいコードは次のようになります。

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>"; 
     } 
    } 
} 
関連する問題