2012-02-23 3 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

+0

nope !! это не было – sandbox

+0

$ xml скорее всего не загружается правильно. Проверьте, что содержит $ xml, прежде чем передавать его в файл simplexml_load_file – lamplightdev

ответ

0

Почему бы не просто удалить эти символы (т.е. входной фильтр, который вы должны делать в любом случае) с чем-то вроде этого:

[EDIT]

$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

+0

Спасибо Treffynnon, исправил его. –

0

Моя догадка, с учетом информации здесь, заключается в том, что скрипт, к которому вы обращаетесь, виноват здесь, а не ваш код. Я бы предположил, что он неправильно обрабатывает косые черты и возвращает неверный ответ XML.

Существует три способа обойти это.

  1. Получить их, чтобы исправить их сценарий, чтобы он мог справиться с косой черты
  2. Удалите слеши из запроса перед его отправкой через: $q = str_replace(array('//', '\\'), '', $q);
  3. Попытка проверить заголовки или ответ XML на наличие ошибок
Смежные вопросы