2010-05-16 81 views
2

嗨,大家好我正在使用这个美妙的类在这里做一些代码嵌入过滤:http://simplehtmldom.sourceforge.net/。它扩展了PHP DOM文档类。PHP简单的DOM解析器

我所做的大部分工作是通过这个包含嵌入代码的类来解析字符串,我通过一个处理函数来获取信息的独特位,例如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 
     } 
    } 

任何投入将感激地赞赏。如果我已经解释了我的问题不够好,请让我知道:)

回答

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

和你已经完全取代了嵌入。

+0

当然,geez很明显。非常感谢你。 – 2010-05-16 05:17:01

+0

谢谢您以前的快速回复! – 2010-05-16 05:37:52

+1

没问题。如果这回答你的问题,请考虑点击好的复选标记,这意味着......它最好的回答你的问题:-)欢迎来到Stackoverflow。 – Erik 2010-05-16 05:45:52

相关问题