UTF8表示为正常文本(utf8 representation as normal text)

2019-08-04 03:40发布

$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没有工作,如何解决呢?

Answer 1:

字符串文字和文件中的文本是不等价的。 $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); 


文章来源: utf8 representation as normal text
标签: php utf-8 utf