Replace <img> src and decode <a> href


Replace <img> src and decode <a> href

我想转换以下内容:

1. From:
<img class="lazyjs bbcodeImage" src="//google.com/blank.gif" data-original="http://google.com/poster.jpg" alt="image" />
1. To:
<img src="http://domain.com/poster.jpg" />
2. From:
<a rel="nofollow" href="/confirm/url/aHR0cDovL2dvb2dsZS5jb20%3D/" class="ajaxLink">
2. To:
<a href="http://google.com">

基本上,我想将data-original用于<img src<a href首先用base64_encode编码,然后用urlencode编码。

以下是我迄今为止所做的工作:

<?php
// 1
$string = '<img class="lazyjs bbcodeImage" src="//google.com/blank.gif" data-original="http://google.com/poster.jpg" alt="image" />';
echo preg_replace('/<img class="lazyjs bbcodeImage" src="'/'/google.com'/blank.gif" data-original="(.*?)" alt="image" '/>/', '<img src="$1" />', $string);
// 2
$string = '<a rel="nofollow" href="/confirm/url/aHR0cDovL2dvb2dsZS5jb20%3D/" class="ajaxLink">';
echo preg_replace('/<a rel="nofollow" href="'/confirm'/url'/(.*?)'/" class="ajaxLink">/', '<a href="$1">', $string);
?>

问题是在2上我不知道如何解码$1

可能会有人建议使用regex,但根据RegEx的说法,除了XHTML自包含标签之外,匹配开放标签不是一个合适的解决方案。感谢上帝,有人做了PHPquery。通过这种方式,您可以像在jQuery中习惯的那样使用选择器来选择这些属性。

无论如何,我想我做到了:

<?php
// 1
$string = '<img class="lazyjs bbcodeImage" src="//google.com/blank.gif" data-original="http://google.com/poster.jpg" alt="image" />';
echo preg_replace('/<img class="lazyjs bbcodeImage" src="'/'/google.com'/blank.gif" data-original="(.*?)" alt="image" '/>/', '<img src="$1" />', $string);
// 2
$string = '<a rel="nofollow" href="/confirm/url/aHR0cDovL2dvb2dsZS5jb20%3D/" class="ajaxLink">';
echo preg_replace_callback('/<a rel="nofollow" href="'/confirm'/url'/(.*?)'/" class="ajaxLink">/', function ($match) { return '<a href="' . base64_decode(urldecode($match[1])) . '">'; }, $string);
?>