#php #encoding #character-encoding #specifications
#php #кодирование #кодировка символов #технические характеристики
Вопрос:
Я открываю файл (сохраненный как ISO 8859-1) с помощью терминала (Ubuntu) и вижу, где в новых строках должен быть следующий символ ^M
(окруженный XX до и после).
Теперь я запускаю этот код на php, чтобы посмотреть, как PHP обрабатывает это:
$text=str_split($text);
var_dump($text);
в var_dump я вижу только массив размером 4 и только ‘X’ в нем.
Есть идеи, что там происходит?
РЕДАКТИРОВАТЬ: open office ^M
правильно переводит это на новую строку.
ЕЩЕ ОДНО РЕДАКТИРОВАНИЕ: следующий код ничего не меняет. echo str_replace("r","XXXXXX",$text);
Я запускаю это перед str_split
Комментарии:
1.
^M
илиr
называется «возврат каретки». Это часто сопутствует «переводу строк»n
в DOS / Windows или для сетевых протоколов. Некоторые текстовые редакторы отображают это, только если оно не используется непрерывно для всех переходов на строки.2.
perl -p -i -e 's/rn/n/g' somefile.txt
преобразует окончания строк, если это вам пригодится.3. Или вы можете
sudo apt-get install dos2unix
, если предпочитаете; это сделает то же самое.4. @El Yobo эта штука с perl не сработала, ты ввел туда все параметры? Должен ли я помещать выходные данные этой вещи в новый файл, или это изменяет сам входной файл?
5. Это изменяет файл напрямую. Вы можете передавать несколько имен файлов одновременно, чтобы преобразовать многие из них. Как именно это не сработало? Если проблема только в том, что файл имеет окончания в формате DOS, а не в формате Unix, скрипт решит ее, но больше ничего не исправит. Вы также могли бы попробовать инструмент dos2unix, но я подозреваю, что он делает точно то же самое внутри.
Ответ №1:
^M
не является переводом строки. ^J
это новая строка. ^M
это символ, который Windows использует перед новой строкой, чтобы показать, что он вызывает разрыв строки. Это также называется «возвратом каретки». Escape-последовательность для этого является r
.
Комментарии:
1. В дополнение к этому, избыток
^M
s часто вызывается передачей по ftp текстового файла в двоичном виде с компьютера Windows (который использует^M^J
последовательность в конце каждой строки) на компьютер Unix (который использует только^J
). Используя режим ASCII, ваша ftp-программа исправит это (но будьте осторожны, использование режима ASCII для двоичных данных обычно ужасно искажает его).