Есть ли в PHP функция замены элементов?

Тема в разделе "Как сделать...", создана пользователем vave, 7 дек 2015.

  1. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    364
    Симпатии:
    14
    Не раз данный форум меня выручал, с моими странными затеями.
    И вот появился у меня очень важный вопрос, для будущего моих идей.

    Есть ли в PHP такая функция, которая заменяла бы в HTML коде любые элементы?
    Например я инклудил сторонний сайт, и мне нужно что бы PHP заменил на сайте картинку,
    например <img src="picture.png" /> на <img src="picture2.png" />
     
  2. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    PHP:
    $str str_replace('picture.png''picture2.png'$str );
    Или надо с DOM древом?
     
    Последнее редактирование: 7 дек 2015
    vave нравится это.
  3. vave

    vave

    Регистр.:
    23 июн 2007
    Сообщения:
    364
    Симпатии:
    14
    Не знаю на счет DOM, я попробовал применить данный код, но что то он ничего на странице не поменял.

    Сайт загружаю таким вот образом <?php include 'http://web.com'; ?>
     
  4. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    Это как так Вы сайт грузите?

    PHP:
    $site file_get_contents('http://web.com');
    $sitestr_replace('picture.png''picture2.png'$site);
    echo 
    $site;
    Или
    PHP:
    ob_start();
    include 
    'http://web.com';
    $site ob_get_clean();
    $sitestr_replace('picture.png''picture2.png'$site);
    echo 
    $site;
     
    vave нравится это.
  5. Eugeny1985

    Eugeny1985 Создатель

    Регистр.:
    5 фев 2015
    Сообщения:
    11
    Симпатии:
    2
    PHP:
    preg_replace ('<img.+?src=[\'"](picture.png)[\'"].+?\/>''picture2.png'$сграбленная_страница);
     
    vave нравится это.
  6. 3ar

    3ar Писатель

    Регистр.:
    18 ноя 2015
    Сообщения:
    4
    Симпатии:
    0
    подключайте simple HTML DOM парсите нужную страницу и в дереве меняйте код как вам угодно
     
  7. mSnus

    mSnus Создатель

    Регистр.:
    4 дек 2015
    Сообщения:
    24
    Симпатии:
    5
    слэш перед .png не забыли? ;-)

     
  8. Eugeny1985

    Eugeny1985 Создатель

    Регистр.:
    5 фев 2015
    Сообщения:
    11
    Симпатии:
    2
    Здесь точка определяет точку. Зачем лишние символы
     
  9. mSnus

    mSnus Создатель

    Регистр.:
    4 дек 2015
    Сообщения:
    24
    Симпатии:
    5
    Затем, что здесь она означает не точку, а любой символ, и вообще этот регэксп не работает. Вы бы тестировали, прежде, чем советовать.!

    Не говоря уж о том, что у вас угловые скобки < и > сейчас работают, как делиметеры регэкспа, а не как html-вские границы тэга.

    В общем, правильный регэксп внизу в коде.

    PHP:
    <?php
    $test_string 
    "<h1>Test</h1><img src='picture.png' border=1 width='450' height=\"100\"><p>Lorem ipsum</p>";
    $test_string2 "<img src='picture.png'>";

    $result_string preg_replace ('<img.+?src=[\'"](picture.png)[\'"].+?\/>''picture2.png'$test_string);
    echo(
    $result_string); echo("\n\n");

    /*
    Результат:

    <h1>Test</h1><picture2.pngp>

    ОШИБКА
    */

    $result_string preg_replace ('<img.+?src=[\'"](picture.png)[\'"].+?\/>''picture2.png'$test_string2);
    echo(
    $result_string); echo("\n\n");

    /*
    Результат:

    <img src='picture.png'>

    НЕ СРАБОТАЛО
    */

    $result_string preg_replace ('{<img\s+src=[\'"]picture\.png[\'"][^>]*\>}Uis''picture2.png'$test_string);
    echo(
    $result_string); echo("\n\n");

    /*
    Результат:

    <h1>Test</h1>picture2.png<p>Lorem ipsum</p>

    ПРАВИЛЬНЫЙ ВАРИАНТ
    */

    ?>
     
  10. mazdada

    mazdada Создатель

    Регистр.:
    27 ноя 2012
    Сообщения:
    8
    Симпатии:
    0
    да нет, здесь точка выступает как любой символ, а чтобы использовалась точка нужно ее заэкранировать "\."