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

Php 使用不同编辑器保存时的不同分析行为,php,vim,encoding,utf-8,Php,Vim,Encoding,Utf 8,标题描述了我的问题。 我用php解析一个文本文件。 此文件包含指向google日历源的url 我像这样访问提要信息 $doc = new DOMDocument(); $doc->load( $feed ); 当我用mac textedit保存这个文件时,一切都很好。 但是当我在linux或mac上用vim保存它时,加载的url是 请注意,百分号转换为:%->%25,行尾为%0A 使用这个url,我在访问提要信息时出错,因为url是错误的。 用vim保存文本文件有什么问题?编码 问候

标题描述了我的问题。 我用php解析一个文本文件。 此文件包含指向google日历源的url

我像这样访问提要信息

$doc = new DOMDocument();
$doc->load( $feed );
当我用mac textedit保存这个文件时,一切都很好。 但是当我在linux或mac上用vim保存它时,加载的url是

请注意,百分号转换为:%->%25,行尾为%0A

使用这个url,我在访问提要信息时出错,因为url是错误的。 用vim保存文本文件有什么问题?编码

问候,,
peter

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

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

:set fileformat mac

在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库中有一个更有效的解决方案,但我还没有研究过。

谢谢。所以百分号也会被编码(%25)。如何使用php来适应这种情况?你知道吗?这是哪种编码?这是URL编码。您可以先尝试
urldecode()
,然后再将其传递给
load()