如何在字符串中查找和更改html值

时间:2014-02-27 13:44:01

标签: php string iframe find

在我的页面上,用户可以在其音乐中插入嵌入式链接。但是如果对象的宽度超过600px,则它不适合页面。所以我正在寻找一些方法来找到iframe标签的width参数,如果值超过600px,则将其更改为600px。但我的谷歌技能让我失望,所以我希望这里有人可以提供帮助。插入的iframe例如如下所示:

<iframe width="660" height="180" src="//www.mixcloud.com/widget/iframe/?feed=http%3A%2F%2Fwww.mixcloud.com%2FCLCK_Podcast%2Fclck-podcast-20-czscream%2F&amp;embed_type=widget_standard&amp;embed_uuid=fd5ce7dc-9687-45e1-8368-27631b48385f&amp;hide_tracklist=1&amp;replace=0&amp;hide_cover=1" frameborder="0"></iframe>

3 个答案:

答案 0 :(得分:6)

以下是如何使用PHP的原生DOM extensions正确完成此操作。与正则表达式不同,这保证适用于所有情况,并且在提供稍微不同的HTML标记格式时不会阻塞:

$dom = new DOMDocument;
$dom->loadHTML($html);    
$html = '';

foreach ($dom->getElementsByTagName('iframe') as $iframe) {

    // get the 'width' attribute value
    $width = (int) $iframe->getAttribute('width');     

    // obvious
    if ($width > 600) {
            $iframe->setAttribute('width', 600);
    }   

    // append the modified HTML to string
    $html .= $dom->saveHTML($iframe) . "\n";                
}

echo $html;

这将检查所有 width标记的<iframe>属性,如果当前值大于此值,则将其设置为600

Online demo

答案 1 :(得分:2)

这对我来说就是错误的方法,请参阅:the XY problem

在查看您的问题时,您似乎允许用户在您的网站上添加和运行任意代码。这可能是一件非常糟糕的事情。什么阻止某人利用XSS,如果他们被允许这样做?即使你正确过滤(我怀疑),它仍然听起来像是错误的方法。

用户只需添加指向您网站的链接,即可完全控制进一步的嵌入和呈现。这样可以防止各种令人讨厌的狗屎。

答案 2 :(得分:-3)

让我们试试正则表达式:

 $pattern = '/<iframe (.*)width="([0-9]{4,}|[6-9][0-9]{2})"(.*)>(.*)<\/iframe>/';
 $replace = '<iframe $1 width="600" $3>$4</iframe>';
 $output = preg_replace($pattern, $replace, $input);

$output将是包含有效iframe的有效字符串; )

Online Demo