使用不同的编辑器保存时的不同解析行为

时间:2011-01-23 23:52:23

标签: php vim encoding utf-8

标题描述了我的问题。 我用PHP解析一个文本文件。 此文件包含Google日历Feed的网址

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

我可以像这样访问Feed信息

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

当我用mac textedit保存这个文件时,那么everthing很好。 但是当我用vim在linux或mac上保存它时,那么加载的url是

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

请注意,百分号会转换为:% - > %25和线路到%0A

使用此网址我在访问Feed信息时收到错误,因为网址错误。 使用vim保存文本文件有什么问题?编码

的问候, 彼得

2 个答案:

答案 0 :(得分:2)

%0A是换行符的编码。换句话说,您的行结尾在不同的编辑器中是不同的(TextEdit的回车符,vim的换行符)。

如果您希望vim写出CR行结尾,请使用以下命令:

:set fileformat mac

答案 1 :(得分:1)

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库中的某个地方有更高效的解决方案,但我没有对它进行过调查。