2016-07-23 4 views
1

PHP простой HTML DOM имеет некоторые проблемы со скобками в HREF
Если у вас есть sample.php страницу и содержит:
PHP HTML DOM круглые скобки в HREF

<a href="this-href-contains-(parentheses)-and-more-texts"></a> 

если вы делаете так:

$html = file_get_html('sample.php'); 
foreach($html->find('a[href*=(parentheses)]') as $element) 
     { 
      echo $element->href; 
     } 

или как это:

$html = file_get_html('sample.php'); 
foreach($html->find('a[href*=this-href]') as $element) 
     { 
      echo $element->href; 
     } 

Это работает.
Но если вы пишете что-то после или перед скобками он не работает:
Это:

$html = file_get_html('sample.php'); 
foreach($html->find('a[href*=contains-(parentheses)]') as $element) 
     { 
      echo $element->href; 
     } 

Или это:

$html = file_get_html('sample.php'); 
foreach($html->find('a[href*=(parentheses)-and-more]') as $element) 
     { 
      echo $element->href; 
     } 

не работает.

+0

С каких это пор URL-адреса имеют круглые скобки? Если это не соответствует HTML, это ошибка в HTML. –

+0

@ URL-адреса Юли Пеллетье могут иметь круглые скобки. Некоторые вещи вроде этого: https://msdn.microsoft.com/en-us/library/aa752574(VS.85).aspx – SAM

+0

Oh! Приятно знать. –

ответ

1

Причина, по которой не работает, потому что есть вопиющая ошибка в коде Simple HTML DOM (ну, один из многих):

В строке 673 simple_html_dom.php вы увидите строку:

return preg_match("/".$pattern."/i", $value); 

Изменить это:

return preg_match("/".preg_quote($pattern)."/i", $value); 

Presto, проблема решена.

Вы можете сообщить об этой ошибке: https://sourceforge.net/p/simplehtmldom/bugs/, но со всеми ошибками в отношении метода find и других, возможно, уже сообщается.

 Смежные вопросы

  • Нет связанных вопросов^_^