2
$text = "\xd0\xa2\xd0\xb0\xd0\xb9\xd0\xbd\xd0\xb0";
$text = iconv('UTF-8', 'UTF-8//IGNORE', $text);
var_dump($text); //Тайна - good
$text = file_get_contents('log.txt');
$text = iconv('UTF-8', 'UTF-8//IGNORE', trim($text));
var_dump($text); // \xd0\xa2\xd0\xb0\xd0\xb9\xd0\xbd\xd0\xb0 - bad

文字列\xd0\xa2\xd0\xb0\xd0\xb9\xd0\xbd\xd0\xb0がファイルから読み取られiconvなかった場合、それを修正する方法は何ですか?

4

1 に答える 1

5

文字列リテラルとファイル内のテキストは同等ではありません。$textはすでにutf-8(Тайна)であり、iconvはそれに何もしません。これは、エスケープシーケンスを使用して、実際のバイナリ値を文字列に入れるためです。ファイル内のデータは、ファイル\xd0\xa2\xd0\xb0\xd0\xb9\xd0\xbd\xd0\xb0から読み取られて変数に格納されているため、文字列リテラルではないため、エスケープされません。これを試してデータを変換してください

$text = file_get_contents('log.txt');
$text = str_replace('\x', '', trim($text));
$text = pack('H*', $text);
var_dump($text); 
于 2012-12-15T08:05:39.767 に答える