Я использую nicEdit для записи данных RTF в мою CMS. Проблема в том, что он генерирует такие строки:
hello first line<br><br />this is a second line<br />this is a 3rd line
, так как это для новостного сайта, я предпочитаю, чтобы окончательный HTML был таким:
<p>hello first line</p><p>this is a second line<br />this is a 3rd line</p>
поэтому мое текущее решение таково:
- мне нужно обрезать данные $ для
<br />
в начале / конце строки
- заменить все строки, имеющие 2
<br/>
или более, на </p><p>
(допускается одна одиночная <br />
).
- наконец, добавьте
<p>
в начале и </p>
в конце
Пока у меня есть только шаги 1 и 3. может кто-нибудь помочь мне с шагом 2?
function replace_br($data) {
# step 1
$data = trim($data,'<p>');
$data = trim($data,'</p>');
$data = trim($data,'<br />');
# step 2 ???
// preg_replace() ?
# step 3
$data = '<p>'.$data.'</p>';
return $data;
}
спасибо!
ps: было бы еще лучше избегать конкретных ситуаций. пример: "hello<br /><br /><br /><br /><br />too much space
" - эти 5 линий перегиба также должны быть преобразованы в один "</p><p>
"
окончательное решение (особая благодарность Кемпу!)
function sanitize_content($data) {
$data = strip_tags($data,'<p>,<br>,<img>,<a>,<strong>,<u>,<em>,<blockquote>,<ol>,<ul>,<li>,<span>');
$data = trim($data,'<p>');
$data = trim($data,'</p>');
$data = trim($data,'<br />');
$data = preg_replace('#(?:<br\s*/?>\s*?){2,}#','</p><p>',$data);
$data = '<p>'.$data.'</p>';
return $data;
}