从PHP手动复制和编程生成的源代码中读取XML的区别

时间:2012-01-27 13:06:46

标签: php xml

我使用XML文件进行PHP编码,其源代码我手动复制,看起来像

<title type='text'>content I've extracted</title>
<content type='text'>content I've extracted</content>

现在一切都已完成,当我通过PHP编码生成内容时,当我尝试从标题和内容标签中提取内容时,不会生成输出...当我交叉检查时,我发现了PHP生成的文件(源代码,RSS feed)看起来像

<title type=\'text\'>content to be extracted </title>
<content type=\'text\'>content to be extracted</content>

由于存在反斜杠,因此无法提取内容,我猜

我用来从这些标签中获取内容的示例PHP代码是

  $titles = $entry->getElementsByTagName( "title" );
  $title = $titles->item(0)->nodeValue;

  $descrs = $entry->getElementsByTagName( "content" );
  $descr = $descrs->item(0)->nodeValue;

我该怎么办?

这是我用来生成XML的PHP​​代码

$url='http://gdata.youtube.com/feeds/api/playlists/12345';
$fp = fopen($url, 'r'); 
$buffer='';
if ($fp) {
while (!feof($fp))
$buffer .= fgets($fp, 1024);
fclose($fp);
file_put_contents('feed.xml', $buffer);

我找到了解决方案

$buff=stripslashes($buffer);
file_put_contents('ka.xml', $buff);

所以stripslashes()函数会删除反斜杠并且可以正常工作

1 个答案:

答案 0 :(得分:4)

看起来您已启用magic quotes

  

如果启用了magic_quotes_runtime,大多数从任何类型的外部源(包括数据库和文本文件)返回数据的函数都会使用反斜杠进行转义。

因此,当您使用fgets读取文件时,任何引号都将被转义。 Magic Quotes自PHP 5.3起已弃用。你不应该在你的脚本中使用它们。

另见http://www.php.net/manual/en/security.magicquotes.php


在旁注中,您复制文件的方法要比它需要的复杂得多。所有这些都可用于将远程XML保存到文件中:

$src = 'http://gdata.youtube.com/feeds/api/playlists/E6DE6EC9A373AF57?v=2';
copy($src, 'dest.xml');

$src = 'http://gdata.youtube.com/feeds/api/playlists/E6DE6EC9A373AF57?v=2';
file_put_contents('dest.xml', file_get_contents($src));

$src = 'http://gdata.youtube.com/feeds/api/playlists/E6DE6EC9A373AF57?v=2';
stream_copy_to_stream(fopen($src, 'r'), fopen('dest.xml', 'w+'));