Php 拆分字符串,保留HTML标记和单词
我需要从所见即所得(WYSIWYG)中获取一个输入,并将其分解为每行有33个(或大约)字符。如果它达到极限,我需要插入一个新行。以下是我的想法:Php 拆分字符串,保留HTML标记和单词,php,Php,我需要从所见即所得(WYSIWYG)中获取一个输入,并将其分解为每行有33个(或大约)字符。如果它达到极限,我需要插入一个新行。以下是我的想法: for($i=0; $i < strlen($string); $i++) { if ($i % 33 == 0 && $i != 0) { $characters[] = '\r'; } $characters[] = $string[$i]; } $result = implode($characters
for($i=0; $i < strlen($string); $i++) {
if ($i % 33 == 0 && $i != 0) {
$characters[] = '\r';
}
$characters[] = $string[$i];
}
$result = implode($characters);
for($i=0;$i
这会破坏HTML标记和单词。我需要忽略HTML标记,允许单词在断行之前完成。实现这一点的更好方法是什么?我要做的是按空格展开,然后计算出一行中可以容纳的“单词”数,而不超过33个字符
$words = explode(' ', $string); // Get all the "words" into one string
$lines = array(); // Array of the lines
$line = array(); // One line
for ($i = 0; $i < count($words); $i++) {
$new_line = array_merge($line, $words[$i]); // Previous line plus this word
$new_line_length = strlen(strip_tags(implode(' ', $new_line))); // Length of line
if ($new_line_length <= 33) { // Is this line under 33 characters?
$line[] = $words[$i]; // Yes, let's add this word to the line
} else { // No, too long.
$line[] = "\r"; // Add newline
$lines[] = $line; // Add $line to the $lines array
$line = array(); // Reset the line
}
}
$final_string = implode('', $lines); // Put the whole thing back into one string
$words=explode(“”,$string);//将所有“单词”放在一个字符串中
$lines=array();//行列式
$line=array();//一行
对于($i=0;$i 如果($new_line_length,我发现JavaScript实际上非常擅长这一点,因为您拥有DOM的强大功能。您可以问“这段tekst有多宽”,它考虑了单个字符的宽度
总体思路是:
从根到叶遍历DOM片段
对于每个节点,确定它是块级元素(如div
)还是内联元素(如span
或a
)。对于块级元素:假设它们从新行开始,以新行结束,因此相应地重置计数器
继续向某些与所见即所得具有相同字体属性的不可见div添加字符(或单词),并查询宽度。如果宽度超过设置的数量,请插入换行符
我怀疑Kevin想保留标记并只是减少内容。是的,标记需要保留。我需要在表单处理状态下这样做,这比使用JS对抗CKEditor更容易(在我看来),这似乎返回空白。在每次迭代中,$new_行都是空白的。