2012-02-18 15 views
2

私はUTF8ファイルを読み込み、ファイルから読み込んだデータを配列に格納しています。しかし、mysqlクエリでそのデータを使用すると、問題が発生しています。 int値(..)を使用する前に、すべてのint値を明示的に変換することを考えました。しかし、intval(utf8string)は私にゼロを与えています。次のコードPHP utf8 intval

は、予期しない出力が得られます。

//..... 
var_dump($data[10]); 
echo '|' . $data[10] . "|\n"; 
echo '|' . bin2hex($data[10]) . "|\n"; 
echo '|' . utf8_decode($data[10]) . "|\n"; 
echo '|' . intval(utf8_decode($data[10])) . "|\n"; 
echo '|' . intval($data[10]). "|\n"; exit 
//..... 

出力:

string(15) "2240000" 
|2240000| 
|003200320034003000300030003000| 
|2240000| 
|0| 
|0| 

、このようなデータから正しいINTVALを取得する方法任意のアイデア?

+0

私はあなたが見ている結果を取得したいどのように理解していません。例に 'var_dump($ data [10]);'の結果を追加できますか? –

+1

'bin2hex($ data [10])'を見せてください。 UTF-8でエンコードされた数字は、ASCIIと同じなので問題はありません。 – deceze

+0

上記の両方の関数の出力を追加しました。 – workwise

答えて

1

文字列がUTF-16(UTF-8ではなく)にエンコードされているようです。

どちらかからデータを取得する場所について何かを変更したり、エンコーディングを変換:

$data[10] = iconv('UTF-16', 'UTF-8', $data[10]) 
+0

これで、私は注意します:PHPの通知:iconv():入力文字列内の不完全なマルチバイト文字を検出しました.... そして文字列が壊れてしまいます。 – workwise

+0

@user末尾に 'NUL'バイトがあり、文字列はBOMで始まらず、UTF-16文字列に必要です。この文字列はどこから来ていますか、どのようにこの配列に入れられますか? – deceze

関連する問題