我的问题如下。我有一个这样的字符串:
$string = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
我将此字符串输出到100px宽的容器中。如果任何单词长度超过10个字符,有没有办法在10个字符后自动插入空格?
$string = chunk_split($string, 10);
不是一个好的解决方案,因为它在单词的中间插入一个空格。例如:
$string = "This is why chunk_split doesn't work";
$string = chunk_split($string, 10);
echo $string;
// OUTPUT: This is wh y chunk_sp lit doesn' t work
重点是空格字符允许字符串创建一个新行。
期望输出:
$string = "This is how it should work.";
$string = function_i_am_looking_for($string);
echo $string;
// OUTPUT: This is how it should work.
$string = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
$string = function_i_am_looking_for($string);
echo $string;
// OUTPUT: AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA
答案 0 :(得分:2)
如果您打算在HTML中查看此内容,请尝试添加<wbr/>
而不是空格
答案 1 :(得分:2)
您可以使用preg_replace()执行此操作:
$string = preg_replace('/(\S{10})(?=\S)/', '$1 ', $string);
这将在每个连续10个非空格字符(\S
)之后插入一个空格,后面跟着至少一个非空格字符。
此外,您可能更愿意使用soft hyphen,U + 00AD或Unicode zero-width space,U + 200B来代替常规空格。
修改:正如sachleen和其他人所说,实际问题的最佳解决方案可能是CSS word-wrap property,特别是word-wrap: break-word
。< / p>
答案 2 :(得分:2)
使用wordwrap() Wordwrap在完成单词之前剪切句子以达到最大宽度。在下一个例子中,我转动了true
最后一个参数,强制剪切总是有10个字符。
$short = wordwrap($string, 10, PHP_EOL, true);
另一种选择是
$short = wordwrap($string, 10, '<br>', true);
然而,按字符数减少并不安全,因为字母的宽度并不总是相同(不同的字体类型)
最好的选择是在句子的最后部分放置一个<div>
。
答案 3 :(得分:2)
如果你只是想强制你的字符串换行而不是扩展到它的父元素之外,你可以直接在css中完成它而不必乱用你的字符串:
p {
width: 100px;
word-wrap: break-word;
}
<p>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</p>
这将让浏览器弄清楚它需要打破的地方,而不是你试图在服务器上解决它。
答案 4 :(得分:1)
答案 5 :(得分:0)
我认为重点是让这些“单词”不会破坏你的布局。看到这样的“单词”多长时间甚至可能不是单词,将它们分开也不太可能使它们更具可读性......为什么不将它们删除呢?
$content = preg_replace("~\w{11,}~","",$content);
答案 6 :(得分:0)
另一种选择..
$string = preg_replace_callback(
"~\w{11,}~",
create_function(
'$m',
'return chunk_split($m[0],10," ");'
),
$string);