Как (только) удалить окружающие теги HTML из выражения в PHP? - PullRequest
0 голосов
/ 23 июня 2011

В моей системе управления контентом я использую выражения как *|UPCOMING_EVENTS|*, позволяющие пользователям генерировать динамический контент, где им угодно.Пользователи изменяют / создают контент через CKEditor.Теперь проблема в том, что CKEditor автоматически оборачивает мои выражения div или p или обоими ...

Я хотел бы изменить это

<h1>Title</h1>
<p>Blablabla</p>
<p>*|UPCOMING_EVENTS|*</p> 
<p>Blablabla</p>

в это

<h1>Title</h1>
<p>Blablabla</p>
*|UPCOMING_EVENTS|* 
<p>Blablabla</p>

Может ли кто-нибудь помочь мне найти способ удалить только окружающие теги (в случае вложенности) из моих выражений?Прямо сейчас я использую эту технику, чтобы найти и заменить мои выражения:

preg_match_all('/\*\|(.*?)\|\*/', $content, $matches);
foreach($matches[1] as $mid => $match) {
    $content = str_replace($matches[0][$mid],$match(),$content);    
}

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 23 июня 2011

Попробуйте

preg_replace('#<([a-z0-9]+)>(\*\|.+?\|\*)</\1>#i', '$2', $subject);

edit: Возможно, слишком сложный и соответствует только одному тегу.Если оба используются p и div, это регулярное выражение лучше:

#(<p.*>|<div.*>)+\s*(\*\|.+?\|\*)\s*(</p>|</div>)+#i
1 голос
/ 23 июня 2011

Вы пробовали strip_tags?Я думаю, что это то, что вы хотите http://php.net/manual/en/function.strip-tags.php

0 голосов
/ 23 июня 2011

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

trim($str,'<div><p>');
and
trim($str,'</p></div>');
...