2016-01-04 2 views
0

Я хочу, чтобы преобразовать следующим образом:Заменить <img> SRC и декодировать <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.

+0

Взгляните: 'preg_replace_callback()' – Rizier123

ответ

0

Возможно, будут люди, предлагающие regex, но в соответствии с RegEx match open tags except XHTML self-contained tags, что не является правильным решением. Слава богу, кто-то сделал PHPquery. Таким образом, вы можете использовать селектора, как вы привыкли в jQuery, чтобы выбрать эти атрибуты.

+0

Если вы говорите о библиотеке в JavaScript JQuery - это приложение PHP Non-HTML, так Я должен придерживаться только PHP. –

+0

Нет, это порт с версии javascript на PHP, поэтому это вызов PHPquery .... –

+0

Быстро ли это? Я говорю о 10 000 000 запросов в день. Я действительно не хочу включать какой-либо класс, но если это единственный способ ... –

0

Nevermind, я думаю, что я сделал это:

<?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); 
?> 
+0

Точно, с 'preg_replace_callback()' вы также можете применять функции обратного вызова к своим совпадениям. – Rizier123

Смежные вопросы