$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
не работает и как ее исправить?
Строковый литерал и текст в файле не эквивалентны. $text
уже utf-8 (Тайна) и iconv ничего не делает для него. Это связано с тем, что вы используете escape-последовательности для размещения фактического двоичного значения в строке. с данными в файле \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);