2013-06-28 3 views
0

Приведенный выше код работает нормально:PHP - С помощью preg_replace с file_get_contents

<?php 

function clearPage($content, $class) { 
$arr = array(
      '@^(.*?)<div class="'.$class.'">(.*?)</div>(.*?)[email protected]' => '<div class="'.$class.'">$2</div>' 
      ); 

    return preg_replace(array_keys($arr), array_values($arr), $content); 


} 


$class = "something"; 
$content = "31xu1823y8<div class="something">Wanted</div>912u38u3" 
$result = clearPage($content, $class); 
echo $result; 
?> 

Это выходы:

<div class="something">Wanted</div> 

Но я хочу, чтобы сделать переменную содержание, быть HTML-код со страницы сайта , Поэтому я меняю последний код на что-то вроде:

$class = "something"; 
$content = file_get_contents('index.php'); 
$result = clearPage($content, $class); 
echo $result; 

This outputs all the webpage! Why!? 
+0

Я предполагаю, что вы найдете ответ в этом вопросе SO -> Http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – adeneo

+0

И да, если вы читаете из 'input.php', вы не получите отображаемый HTML, а PHP источник с только фрагментами HTML. (Проблема с регулярным выражением: флаг DOTALL.) – mario

ответ

0

Использование регулярного выражения или соответствия строк - худший способ разобрать HTML.

Вы должны использовать DOM: http://php.net/manual/en/book.dom.php

или 3-ю библиотеку партия Dóm как так: http://simplehtmldom.sourceforge.net/

+0

Почему бы не заострить внимание на одном из сотен подобных вопросов с такими же неспецифическими ответами? – mario

+0

Я думаю, что мое решение в порядке, но проблема в том, что я не получаю код html со страницы, поэтому он ничего не заменяет. –