PHP简单DOM解析器

时间:2010-05-16 05:07:11

标签: html dom class

大家好我在这里使用这个精彩的类来做一些代码嵌入过滤:http://simplehtmldom.sourceforge.net/。它扩展了PHP DOM文档类。

我正在做的就是通过这个包含嵌入代码的类解析一个字符串,我抓住了一些独特的信息,例如id,width,height通过一个处理函数发送到我的id,width,height等预定义的“安全”模板,并将我的安全模板重新插入到用户放入的嵌入代码的位置。看起来似乎是一种落后的方式,但这是它必须完成的方式:)

所有这一切都很好。问题是当字符串中不仅包含嵌入代码时,因为我不能只替换嵌入代码,我只能替换擦除其余标记等字符串的整个字符串。例如,如果有一个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 个答案:

答案 0 :(得分:4)

执行此操作时:

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

你完全取代了嵌入。