В PHP, как удалить переносящий абзац, но только если это единственный абзац

#php #html

#php #HTML

Вопрос:

Как удалить (в данном случае бесполезный) переносящий абзац в случаях, подобных этому:

 <p>Only paragraph</p>
  

Но сохранить строку такой, какая она есть, когда задействовано более одного абзаца:

 <p>Paragraph 1</p>
<p>Paragraph 2</p>
  

preg_replace, вероятно, сработал бы здесь, но только если вы можете обрабатывать регулярные выражения.. :/

Комментарии:

1. Я думаю, вы просто избегаете другой проблемы с этим вопросом. Вам следует переработать свой CSS, чтобы он работал в любом случае.

2. A <p> никогда не бывает устаревшим или бесполезным. Он определяет текстовый абзац, и это то, что у вас там есть. Даже если это единственный, это все равно это абзац!

3. Он устарел, и это не вопрос CSS, поскольку строка будет введена в элемент контейнера, который может быть любым от h2 до div и всем, что между ними. Мне действительно не нужны теги абзаца внутри элемента заголовка, иначе. они устарели.

4. crappish: Почему вы согласны с двумя абзацами в <h2> , но не с одним? Вы противоречите сами себе.

5. Потому что эти тексты с несколькими абзацами не будут находиться в заголовках. Можем ли мы, пожалуйста, вернуться к проблеме?

Ответ №1:

Вот один из способов, 2 тестовых примера, $ a и $ b

 $a = '<p>Only paragraph</p>';

$b = '<p>Only paragraph</p>
      <p>Only paragraph</p>
      <p>Only paragraph</p>';

// change the values to $a and then $b
if( count( explode('<p>', $a) ) == 2 ){
  $c = preg_replace('#</?p>#', '', $a);
}

if( isset( $c)) {
    var_dump( $c );
}
// 'Only paragraph'
  

Возможно, вам также потребуется сначала добавить trim().

Не учитывает искаженный ввод, например

 <p>para1 </p> para 2</p>
  

Комментарии:

1. Это работает. 🙂 Но предпочел бы видеть preg_replace, поскольку регулярные выражения, когда все сделано правильно, являются вполне бомбоубежищным решением. 🙂