Использование PHP для удаления html-элемента из строки - PullRequest
4 голосов
/ 23 сентября 2011

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

    $text = "<p>This is some example text This is some example text This is some example text</p>
             <p><em>This is some example text This is some example text This is some example text</em></p>
             <p>This is some example text This is some example text This is some example text</p>";

Я в основном хочу использовать что-то вроде preg_repalce и regex для удаления

<em>This is some example text This is some example text This is some example text</em>

Итак, мне нужно написать PHP-код, который будет искать открывающий <em> и закрывающий </em> и удалять весь текст в промежутке между

надеюсь, что кто-то может помочь, спасибо.

Ответы [ 5 ]

4 голосов
/ 23 сентября 2011
$text = preg_replace('/([\s\S]*)(<em>)([\s\S]*)(</em>)([\s\S]*)/', '$1$5', $text);
2 голосов
/ 23 сентября 2011
$text = '<p>This is some example text This is some example text This is some example text</p>
<p><em>This is the em text</em></p>
<p>This is some example text This is some example text This is some example text</p>';

preg_match("#<em>(.+?)</em>#", $text, $output);

echo $output[0]; // This will output it with em style
echo '<br /><br />';
echo $output[1]; // This will output only the text between the em

[ Просмотр вывода ]

Чтобы этот пример работал, я немного изменил содержимое <em></em>,в противном случае весь ваш текст будет одинаковым, и вы не сможете понять, работает ли скрипт.

Однако, если вы хотите избавиться от <em>, а не получить содержимое:

$text = '<p>This is some example text This is some example text This is some example text</p>
<p><em>This is the em text</em></p>
<p>This is some example text This is some example text This is some example text</p>';

echo preg_replace("/<em>(.+)<\/em>/", "", $text);

[ Просмотр вывода ]

1 голос
/ 23 сентября 2011

В случае, если вас интересует решение без регулярных выражений, вы также должны выполнить следующие действия:

<?php
    $text = "<p>This is some example text This is some example text This is some example text</p>
             <p><em>This is some example text This is some example text This is some example text</em></p>
             <p>This is some example text This is some example text This is some example text</p>";


    $emStartPos = strpos($text,"<em>");
    $emEndPos = strpos($text,"</em>");

    if ($emStartPos && $emEndPos) {
        $emEndPos += 5; //remove <em> tag aswell
        $len = $emEndPos - $emStartPos;

        $text = substr_replace($text, '', $emStartPos, $len);
    }

?>

Это приведет к удалению всего содержимого между тегами .

1 голос
/ 23 сентября 2011

Используйте strrpos, чтобы найти первый элемент, а затем последний элемент.Используйте substr, чтобы получить часть строки.А затем замените подстроку пустой строкой из исходной строки.

0 голосов
/ 23 сентября 2011
  format: $text = str_replace('<em>','',$text);
$text = str_replace('</em>','',$text);
...