【发布时间】:2013-06-07 11:40:00
【问题描述】:
我已将所见即所得编辑器从旧版本升级到最新版本。图像尺寸的保存方式有所不同。旧版本的编辑器用于在图像标签中添加宽度和高度参数。新的编辑器会创建一个样式参数并添加宽度和高度作为样式。
我有一个 preg_replace 函数,我可以在 <img> 周围包裹一个 <a> 标记。
当前的 preg_replace 不再起作用,因为新编辑器在 style 参数中保存了宽度和高度。
预替换:
$Content = preg_replace('#<img(.*?)src="([^"]*/)?(([^"/]*)\.[^"]*)"([^>]*?)>((?!</a>))#', '<a rel="group" class="fancybox fancy" title="" href="$2$3"><img$1src="$2$3"></a>', $Content);
如果很高兴知道,新编辑器会像这样存储图像:
<img alt="" src="" style="" />
而旧的编辑器是这样存储图像的:
<img src="" width="404" height="228" alt="" />
如何重构我的 preg_replace 以复制完整的样式元素?向后兼容也很酷。
感谢您的宝贵时间 :)
【问题讨论】:
-
您可以匹配所有元素,进行解析,然后使用原始匹配数组替换旧元素。您只需要使用正则表达式将 preg_match 扩展为几行代码。
-
您可能需要考虑使用 DOM 解析器而不是正则表达式来处理这类事情。
-
不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML,并且您将面临悲伤和挫败感。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用已经编写、测试和调试的 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php。
标签: php image html-parsing preg-replace preg-match