2010-05-16 5 views
2

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

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

Все это работает отлично. Проблема в том, что в строке есть нечто большее, чем просто вставлять код, поскольку я не могу просто заменить код для встраивания. Я могу только заменить всю строку, которая вытирает остальную часть тэгов и т. Д. Например, если есть тег 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 
     } 
    } 

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

ответ

4

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

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

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

<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>"; 

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

+0

Конечно, это было очевидно. Большое спасибо. –

+0

Благодарим вас за быстрый ответ! –

+1

Нет проблем. Если это ответит на ваш вопрос, подумайте о том, чтобы щелкнуть хороший галочкой, что означает ... он наилучшим образом отвечает на ваш вопрос :-) И добро пожаловать в Stackoverflow. – Erik

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