PHP Simple DOM Parser - PullRequest
       11

PHP Simple DOM Parser

2 голосов
/ 16 мая 2010

Привет, ребята. Я использую этот замечательный класс для небольшой фильтрации кода: http://simplehtmldom.sourceforge.net/. Он расширяет класс документов PHP DOM.

Практически все, что я делаю, это анализ строки через этот класс, который содержит код для встраивания, я беру уникальные биты информации, например, id, ширину, высоту, отправляемую через функцию-обработчик, которая вставляет id, ширину, высоту и т. Д. В мой предопределенный «безопасный» шаблон и заново вставьте мой безопасный шаблон вместо встроенного кода, который вставил пользователь. Может показаться отсталым, но это так и должно быть:)

Все это прекрасно работает. Проблема в том, что когда в строке содержится не просто код для встраивания, так как я не могу просто заменить код для встраивания, я могу заменить только всю строку, которая стирает остальную часть строки тегов и т. Д. Например, если бы был тег p, который был бы стерт.

Итак, мой вопрос: как с помощью этого класса я могу просто заменить определенную часть строки? Потратил последние несколько дней, пытаясь решить эту проблему, и мне нужно больше информации. Похоже, класс может это сделать, поэтому я в замешательстве.

Вот базовая версия того, что у меня есть до сих пор:)

    // load the class
    $html = new simple_html_dom();

    // load the entire string containing everything user entered here
    $return = $html->load($string);

    // check for embed tags
    if($html->find('embed') == true
    {
         foreach($html->find('embed') as $element)
         {
              // send it off to the function which returns a new safe embed code
              $element = create_new_embed($parameters);

              // this is where i somehow i need to save the changes and send it back to $return
         }
    }

Любой вклад будет с благодарностью. Если я достаточно хорошо объяснил свою проблему, пожалуйста, дайте мне знать:)

1 Ответ

4 голосов
/ 16 мая 2010

Когда вы делаете это:

foreach($html->find('embed') as $element)

Вы создаете объект элемента simpleHTMLdom - это не простая переменная, которую вы можете просто использовать как присваивание. Например, если элемент был:

<embed>Some Embed Code Here</embed>

Вы можете изменить его, выполнив следующее:

$element->innertext = "Hello world";
# the element is now <embed>Hello world</embed>

из, если вы хотите полностью изменить элемент:

$element->outertext = "<p>Now I'm a paragraph</p>";

и вы полностью заменили код для вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...