Хотя я использую fread()
в обычном текстовом файле (например, ANSI-файл обычно сохраняется в Блокноте), как и всем известно, возвращаемая строка содержимого верна.
Но когда я читаю текстовый файл UTF-8, возвращаемая строка содержимого содержит невидимых символов (спереди). Я сказал, что невидимый состоит в том, что дополнительные символы не могут нормально отображаться на выходе (например, echo
для только что прочитанного). Но когда для обработки используется строка содержимого (например: Создать ссылку со значением href
), тогда возникает проблема.
$filename = "blabla.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
echo '<a href="'.$contents.'">'.$contents.'</a>';
Я поместил только http://www.google.com
в текстовый файл кодировки UTF-8. Запустив файл PHP, вы увидите выходную ссылку http://www.google.com
... но вы никогда не достигнете Google.
Поскольку источник адреса href
выглядит следующим образом:
%EF%BB%BFhttp://www.google.com
Это значит, fread
добавлено %EF%BB%BF
странных символов спереди.
Это очень раздражающий материал. Почему это происходит?
Добавлено:
Некоторые указывают, что это спецификация. Итак, спецификация или что-то еще, это меняет мои первоначальные значения. Так что теперь, это проблема с другими шагами, вызовами функций и т. Д. Теперь мне нужно substr($string,3)
для всех выходов. Это совершенно бессмысленно менять исходные значения.