Intereting Posts
выведение пользователя полностью из веб-сайта получение трех записей в порядке убывания каждой категории с использованием codeigniter Функции PHP json_encode и javascript Отключить ошибку отображения PHP.ini openssl_pkey_new () throwing errors – Правильная настройка openssl.cnf для php Как запретить PDO интерпретировать знак вопроса в качестве заполнителя? Laravel 5 – многомерная группаBy, orderBy & paginate Невозможно получить доступ к константе класса из экземпляра с помощью оператора :: scope PHP хранения нескольких целых переменных в 1 переменную? Безопасное обнаружение ошибки «Разрешенная память» Управлять фатальными ошибками в PHP с помощью register_shutdown_function () Как автоматически определять часовой пояс пользователя? Неверное форматирование float в PHP (sprintf, printf) mysql phpmyadmin пароль пользователя для базы данных Предупреждение: mysqli_stmt :: close () : недопустимый объект или ресурс mysqli_stmt … почему?

Использование PHP для удаления элемента html из строки

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

$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> и удалить весь текст между ними

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

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

 <?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); } ?> 

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

 $text = preg_replace('/([\s\S]*)(<em>)([\s\S]*)(</em>)([\s\S]*)/', '$1$5', $text); 
 $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); 

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

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

  format: $text = str_replace('<em>','',$text); $text = str_replace('</em>','',$text);