i use nicEdit to write RTF data in my CMS. The problem is that it generates strings like this:
hello first line
this is a second line<
-
This approach will solve your problem:
- Split the string on
<br>
or <br />
: you'll get an array of strings.
- Create a new string
<p>
.
- Loop on the array of 1, from the beginning to the end and remove all entries that are empty, until an entry that is not empty (break).
- Same as 3, but from the end to the beginning of the array.
- Loop on the array of 1, have an integer value A (default 0), which states that there is a single or double break.
- If the string is empty, increase the value of A and continue the loop.
- If the string is not empty:
- If the value of A is 1 or below, append a
<br>
.
- If the value of A is 2 or above, append a
</p><p>
.
- Append the content of the current entry (which is not empty).
- Set the value of A to 0.
- Append
</p>
A different approach: using Regular Expressions
(<br ?/?>){2,}
Will match 2 or more <br>
. (See php.net on preg_split on how to do this.)
Now, the same approach on step 2 and 3: loop on the array twice, once from the beginning up (0..length) and once from the end down (length-1..0). If the entry is empty, remove it from the array. If the entry is not empty, quit the loop.
To do this:
$array = preg_split('/(<br ?/?>\s*){2,}/i', $string);
foreach($i = 0; $i < count($array); $i++) {
if($value == "") {
unset($array[$i]);
}else{
break;
}
}
foreach($i = count($array) - 1; $i >= 0; $i--) {
if($value == "") {
unset($array[$i]);
}else{
break;
}
}
$newString = '<p>' . implode($array, '</p><p>') . '</p>';
讨论(0)
-
I think this should work for step #2 unless I am not understanding your scenario completely:
$string = str_replace( '<br><br>', '</p><p>', $string );
$string = str_replace( '<br /><br />', '</p><p>', $string );
$string = str_replace( '<br><br />', '</p><p>', $string );
$string = str_replace( '<br /><br>', '</p><p>', $string );
讨论(0)
-
This will work even if the two <br>
s are on different lines (i.e. there is a newline or any whitespace between them):
function replace_br($data) {
$data = preg_replace('#(?:<br\s*/?>\s*?){2,}#', '</p><p>', $data);
return "<p>$data</p>";
}
讨论(0)
- 热议问题