2017-10-22 4 views
0

次のコードは、正しいエンコードを検出しません。キリル記号の問題

$data = 'ABCDEG АБВГДЕ'; 
$charset = mb_detect_encoding($data); 
$data = iconv($charset, "UTF-8", $data); 
$data = mb_strtolower($data, 'UTF-8'); 
$datasort = str_replace(array("\r", "\n", " "), '', $data); 
$counter = mb_strlen($datasort,'UTF-8'); 
foreach (count_chars($datasort, 1) as $i => $val) 
{ 
echo ' 
<tr> 
    <th scope="row">'.mb_detect_encoding(chr($i)).'</th> 
// ON LATIN SYMBOLS IT DETECTED ANCII AND ON CYRILLIC IT DETECTED **NOTHING** 
</tr> 
'; 
} 

ここに問題がありますか? // PHPファイルはUTF-8エンコーディング

+0

ASCIIはUTF-8のサブセットであり、その文書がASCIIであるならば、それはすでにUTF-8です。この場合、すべての文字はASCIIを返しますが、ループする前にその言葉にしてエンコードを検出しようとすると、UTF-8 –

+0

@headmax Thatsが得られます。しかし、主な質問は、なぜキリル文字のエンコードを検出しようとすると、代わりに**何もない** ASCIIを得ます。 –

+0

なぜ文字エンコードを検出(推測)したいのですか?テキストが書き込まれたエンコーディングで読み込むだけで済みます。その重要な情報(メタデータ)を失ったことはありますか?この場合、エンコーディングはエディタに使用するように指定したものです。 –

答えて

1

はこれとASCIIまたはUTF-8になるものをすべて試してみてください持っている:あなたのコードの問題は... count_charsは、変換時にエンコーディングを変更することである

function mbStringToArray ($string) { 
    $strlen = mb_strlen($string); 
    while ($strlen) { 
     $array[] = mb_substr($string,0,1,"UTF-8"); 
     $string = mb_substr($string,1,$strlen,"UTF-8"); 
     $strlen = mb_strlen($string); 
    } 
    return $array; 
} 

$data = 'ABCDEG АБВГДЕ'; 
$data = str_replace(array("\r", "\n", " "), '', mb_strtolower($data)); 
iconv(mb_detect_encoding($data, mb_detect_order(), true), "UTF-8", $data); 

$data = mbStringToArray($data); 

echo '<table>'; 
foreach ($data as $i => $val) 
{ 
echo ' 
<tr> 
    <th scope="row">'. $val . ' : ' .mb_detect_encoding(chr($i)).'</th> 
</tr> 
'; 
} 
echo '</table>'; 

A:ASCII B:UTF-8 C:UTF-8 D:UTF-8 E:UTF-8 G:UTF-8 А:UTF-8 Б:UTF-8 Â:UTF-8 Г:ASCII Д:ASCII Е:UTF-8

関連する問題