繁体   English   中英

PHP中的HTML失败的Regex语法

[英]Failing Regex Syntax for html in PHP

我有点情况。 正在工作的站点分为移动站点和主站点两部分。 它们都从同一数据库/表中获取内容。 它是一个博客网站。 当管理员使用文本编辑器(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);

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

...如评论中已经建议的那样,使用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();

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

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

请参阅在保存domdocument的同时删除doctype

尝试下一个正则表达式

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

从开头删除/,从结尾删除空格。

为了正确工作,您应该首先找到所有img标签,然后再进行更改。

您的正则表达式将无法使用,缺少属性标记alt或属性处于其他顺序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM