Закрыть в noindex некоторые картинки

Тема в разделе "PHP", создана пользователем quick, 20 апр 2011.

Модераторы: latteo
  1. quick

    quick Постоялец

    Регистр.:
    24 май 2008
    Сообщения:
    56
    Симпатии:
    24
    Доброго дня,
    помогите, пожалуйста, правильно написать preg_replace, чтобы все тэги img, кроме тех, у которых src=example.com, обрамлялись ноиндексом. Атрибут src не обязательно идет сразу после img. Так же могут быть использованы как двойные, так и одинарные кавычки, или вообще без кавычек.
    Пример исходного кода:
    Код:
    <p>text<img class="left" src='http://bal-bla.com' />text</p>
    <p>text<img class='right' src="http://example.com" />text</p>
    
    Результат должен быть:
    Код:
    <p>text<noindex><img class="left" src='http://bal-bla.com' /></noindex>text</p>
    <p>text<img class='right' src="http://example.com" />text</p>
    
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    PHP:
    $data '<p>text1<img class="left" src=\'http://bal-bla.com\' />text</p>
    <p>text2<img class=\'right\' src="http://example.com" />text</p>'
    ;
    $data preg_replace('/<img[^>]*?src=[\'"]?http:\/\/example\.com[\'"]?[^>]*?>/is''<noindex>$0</noindex>'$data);
    echo 
    $data;
     
  3. b7186

    b7186

    Заблокирован
    Регистр.:
    19 янв 2011
    Сообщения:
    728
    Симпатии:
    91
    Мне больше интересно зачем закрывать картинки в noindex? На сколько мне известно этот тег нужен для закрытия текста от индексации.
     
  4. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    html-код это и есть текст.
    noindex — имя не входящего в официальную спецификацию тега языка гипертекстовой разметки веб-страниц HTML, предназначенного для включения в него частей веб-страниц, не предлагаемых к индексации поисковыми системами.
    Учи матчасть ;)
     
  5. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    Первое, что пришло в голову:
    PHP:
    $text '<p>text<img class="left" src=\'http://bal-bla.com\' />text</p>
    <p>text<img class=\'right\' src="http://example.com" />text</p>'
    ;

    echo 
    preg_replace_callback("|<img .*?/>|"asd$text);

    function 
    asd($t) {
        if (
    strpos($t[0], 'http://example.com')) {
           return 
    $t[0];
        } else {
           return 
    '<noindex>'.$t[0].'</noindex>';
        }
    }
     
    quick нравится это.
  6. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    1) регулярка регистрозависимая и тег <IMG /> уже не съест.
    2) /> - слэша в коде может и не быть(он требуется в xhtml strict).
    3) example.com может находиться и не в href, в этом случае произойдет ошибочная замена.
     
  7. quick

    quick Постоялец

    Регистр.:
    24 май 2008
    Сообщения:
    56
    Симпатии:
    24
    спасибо за столь быстрый ответ!
    saen,
    ваш вариант почему-то не работает. можете сами убедиться на http://regex.larsolavtorvik.com/
    Belial,
    использовал ваш вариант, вроде всё ок, спасибо!
    b7186,
    у меня на сайте много внешних картинок, есть мнение, что ТИЦ "утекает" таким образом, хочу проверить.
     
  8. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    нуб) проверь в любом другом конструкторе, а еще лучше запусти скрипт и сам убедись :D
     
  9. quick

    quick Постоялец

    Регистр.:
    24 май 2008
    Сообщения:
    56
    Симпатии:
    24
    на сайте в первую очередь проверил, он работает с точностью до наоборот, т.е. example.com экранирует, а все остальные оставляет как есть.
     
  10. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Пожалста
    PHP:
    $data '<p>text1<img class="left" src=\'http://bal-bla.com\' />text</p>
    <p>text2<img class=\'right\' src="http://example.com" />text</p>'
    ;
    $data preg_replace('/<img[^>]*?src=[\'"]?http:\/\/(?!example\.com)[\'"]?[^>]*?>/is''<noindex>$0</noindex>'$data);
    echo 
    $data;
     
    quick нравится это.