2012-02-23 66 views
0

当用户插入特殊符号\\或在搜索框中//,我得到以下错误:在PHP错误特殊符号

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity

如何去除呢?

$q=$_GET["abc"]; 
    $xml = "http://abc/seach?q=".urlencode($q);  
    $Obj = simplexml_load_file($xml); 
+1

如果您在浏览器中直接访问URL,是否会得到格式正确的XML响应? – Treffynnon 2012-02-23 12:26:57

+0

不!它没有 – sandbox 2012-02-23 12:31:32

+0

$ xml很可能未被正确加载。在将它传递到simplexml_load_file之前,请检查$ xml包含的内容 – lamplightdev 2012-02-23 12:32:10

回答

0

为什么不只是像这样的东西删除这些符号(即滤波器输入,你本来也应该这样做):

[编辑]

$q = $_GET["abc"]; 

// Array of character patterns not allowed 
$not_allowed = Array('\\','//'); 

// Strip from query 
$q = str_replace($not_allowed,'',$q); 

// Pass to XML 
.... 
+0

你不需要'foreach'循环这里。 'str_replace'可以接受和替换项目的数组。看到我的答案:http://stackoverflow.com/a/9413187/461813 – Treffynnon 2012-02-23 12:42:25

+0

谢谢Treffynnon,修复它。 – 2012-02-23 12:48:09

0

我最好的猜测,给出这里的信息,是你正在访问的脚本在这里是错误的,而不是你的代码。我会建议它不正确地处理斜杠并返回无效的XML响应。

有三种解决方法。

  1. 让他们解决他们的脚本,以便它能够处理斜线
  2. 从查询中删除的斜线被发送之前在: $q = str_replace(array('//', '\\'), '', $q);
  3. 尝试检查标题或错误
  4. XML响应