PHP中的html失败的正则表达式语法

时间:2013-11-20 15:24:18

标签: php regex

我有点情况。我正在开发的网站有两个部分,即移动和主要网站。它们都从同一个db / table中获取内容。它是一个博客网站。当管理员使用文本编辑器(CKEditor)创建包含图像的内容时,style属性将附加到生成的img标记。所以输出看起来像这样。

<img alt="some content" src="some location" style="width:520px; height:600px;" />

这在主站点上运行良好,但在移动站点上,图像缩放和拉伸很差。 我有一个缩略图脚本可以解决这个问题,但我希望在页面加载之前获得src属性,以及删除style属性的方法。

我使用正则表达式做到了这一点。

$str=$blog_post_column_from_database

$pattern=array ('#\<img alt="(.*?)" src="(.*)" style="(.*?)" /> #' );

$replacement=array ( '<img src="$my_thumbnailer_here.php?src=\\2" width="100%" />' );

$a=(string)$str; //converts text to string to avoid code lines from executing

return preg_replace($pattern,$replacement,$a);

请问我做错了什么?...正则表达式不是我的强项,谢谢。

2 个答案:

答案 0 :(得分:1)

...正如评论中已经建议的那样,您最好使用PHP DOMDocument

这样的事情可以解决问题:

示例:http://3v4l.org/Gv4dp

//get new domdoc instance
$dom=new DOMDocument();

//load your html
$dom->loadHTML($your_html);

//get all images
$imgs = $dom->getElementsByTagName("img");

//iterate over those
foreach($imgs as $img){
    //remove style attribute
    $img->removeAttribute('style');
    //prefix src attribute with scriptname
    $img->setAttribute( 'src' , 'thumbnail.php?img=' . $img->getAttribute('src') );
}

//output modified html
echo $dom->saveHTML();

您可能希望删除将doc保存为html时创建的<doctype><html><body>元素,方法是将最后一行替换为:

echo preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), '', $dom->saveHTML()));

请参阅removing doctype while saving domdocument

答案 1 :(得分:0)

尝试下一个正则表达式

$pattern=array ('#<img alt="(.*?)" src="(.*)" style="(.*?)" />#' );

从开始和空间中删除/从结束。

为了正确的工作,你应该首先找到所有的img标签然后改变它。

您的正则表达式无法正常运行属性标记alt,或属性处于其他顺序