2016-12-13 5 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» часть «mb_». Спасибо, что ссылались на статью Люка.

Правильный код должен быть:

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