utf8表示为普通文本

时间:2012-12-15 07:39:24

标签: php utf-8 utf

$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不起作用以及如何修复它?

1 个答案:

答案 0 :(得分:5)

字符串文字和文件中的文字不相同。 $text已经是utf-8(Тайна),而iconv对此无效。这是因为您使用escape sequences将实际二进制值放入字符串中。文件\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);