Разное поведение при разборе при сохранении в другом редакторе - PullRequest
1 голос
/ 24 января 2011

заголовок описывает мою проблему. я разбираю текстовый файл с php. этот файл содержит ссылку на фид календаря Google

http://www.google.com/calendar/feeds/example%40googlemail.com/public/full

я получаю доступ к информации о фиде вот так

$doc = new DOMDocument();
$doc->load( $feed );

когда я сохраняю этот файл с mac textedit, тогда все в порядке. но когда я сохраняю его с помощью vim на Linux или Mac, тогда загружаемый URL-адрес равен

http://www.google.com/calendar/feeds/example%2540googlemail.com/public/full%0A

обратите внимание, что знак процента преобразуется в:% ->% 25 и конец строки в% 0A

с этим URL я получаю ошибку при доступе к информации о канале, потому что URL неверный. В чем проблема с сохранением текстового файла с vim? кодирование?

С уважением, питер

Ответы [ 2 ]

2 голосов
/ 24 января 2011

%0A - кодировка символа перевода строки. Другими словами, в разных редакторах окончания строк различаются (возврат каретки для TextEdit, перевод строки для vim).

Если вы хотите, чтобы vim записывал окончания строки CR, используйте следующую команду:

:set fileformat mac
1 голос
/ 24 января 2011

В вашем php.ini должен быть параметр "auto_detect_line_endings", который обычно имеет значение "Off". Изменяя его, следует решить проблему на месте.

Если это невозможно для вас, вы можете удалить ненужные символы после загрузки введенного вами документа. Функция php str_replace () делает это немного быстрее, чем регулярное выражение, поэтому я бы порекомендовал это для вашего случая:

$mystring = str_replace(chr(10), "", $mystring); //remove carriage returns
$mystring = str_replace(chr(13), "", $mystring); //remove carriage returns

Я уверен, что где-то в библиотеке DOM / LIBXML есть более эффективное решение, но я не исследовал его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...