在我的页面上,用户可以在其音乐中插入嵌入式链接。但是如果对象的宽度超过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&embed_type=widget_standard&embed_uuid=fd5ce7dc-9687-45e1-8368-27631b48385f&hide_tracklist=1&replace=0&hide_cover=1" frameborder="0"></iframe>
答案 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
。
答案 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的有效字符串; )