2012-02-23 65 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響應