Gil*_*ong 5 php image preg-replace html-parsing preg-match
我已经将WYSIWYG编辑器从旧版本升级到最新版本.图像尺寸的保存方式有所不同.旧版本的编辑器用于向图像标记添加宽度和高度参数.新编辑器创建样式参数,并将宽度和高度添加为样式.
我有一个preg_replace函数,我使用,以便我可以包围<a>
标签<img>
.
由于新编辑器在样式参数中保存宽度和高度,因此当前preg_replace不再起作用.
Preg替换:
$Content = preg_replace('#<img(.*?)src="([^"]*/)?(([^"/]*)\.[^"]*)"([^>]*?)>((?!</a>))#', '<a rel="group" class="fancybox fancy" title="" href="$2$3"><img$1src="$2$3"></a>', $Content);
Run Code Online (Sandbox Code Playgroud)
如果要知道,新编辑器会存储如下图像:
<img alt="" src="" style="" />
Run Code Online (Sandbox Code Playgroud)
而旧编辑器存储的图像如下:
<img src="" width="404" height="228" alt="" />
Run Code Online (Sandbox Code Playgroud)
我怎样才能重构我的preg_replace来复制完整的样式元素呢?向后兼容性也很酷.
谢谢你的时间 :)
试试这个:
$regex = '#<img([^>]*) src="([^"/]*/?[^".]*\.[^"]*)"([^>]*)>((?!</a>))#';
$replace = '<a rel="group" class="fancybox fancy" title="" href="$2"><img$1 src="$2"$3></a>';
$Content = preg_replace($regex, $replace, $Content);
Run Code Online (Sandbox Code Playgroud)
您可以更多地简化正则表达式,请注意,如果您希望输入正确,则可以使用此解决方案,否则只需使用html解析器:
$string = 'Some text <img alt="bar" title="foo" src="http://example.com/example.jpg" style="width:200px;height:400px;" /> Some text';
$new_string = preg_replace('#<img.+?src="([^"]*)".*?/?>#i', '<a href="$1">$0</a>', $string);
var_dump($new_string);
Run Code Online (Sandbox Code Playgroud)
说明:
<img
: 比赛 <img
.+?
:匹配任何一次或多次(ungreedy)src="
: 比赛 src="
([^"]*)
:匹配除"
零次或多次之外的任何内容并对其进行分组".*?/?>
:匹配"
,然后任何东西,直到/>
或>
i
修饰符:匹配大小写不敏感您可能想要使用<img.+?src\s*=\s*"([^"]*)".*?/?>
,您永远不会知道可能之前和之后都有空格=
.