我正在寻找一种跨浏览器的方式来包装长度在具有预定宽度的div内部没有间隔空格(例如长URL)的文本。
以下是我在网络上发现的一些解决方案以及不为我工作的原因:
看起来很有希望但不完全存在的事情:
有没有人对如何解决这个问题有更多想法?
答案 0 :(得分:35)
Css哟!
.wordwrap {
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
我也刚刚发现这篇文章 http://www.impressivewebs.com/word-wrap-css3/
所以你应该使用
.wordwrap {
word-wrap: break-word;
}
.no_wordwrap {
word-wrap: normal;
}
答案 1 :(得分:28)
我通常使用word-wrap
和<wbr>
想法的组合处理此问题。请注意,有一些variants。正如您所看到的,​
可能是兼容性的最佳选择。
word-wrap
浏览器支持不是糟糕,考虑到所有因素,Safari,Internet Explorer和Firefox 3.1(Alpha Build)都支持它(src),所以我们可能不会那么遥远。
关于服务器端的破坏,我已经非常成功地使用了这个方法(php):
function _wordwrap($text) {
$split = explode(" ", $text);
foreach($split as $key=>$value) {
if (strlen($value) > 10) {
$split[$key] = chunk_split($value, 5, "​");
}
}
return implode(" ", $split);
}
基本上,对于超过10个字符的单词,我将它们分成5个字符。这似乎适用于我所有的用例。
答案 2 :(得分:1)
这里存在一个松散相关的问题textarea with 100% width ignores parent element's width in IE7
不知道是否找到任何结论性解决方案,但似乎最接近 word-break:break-all ,这可能会在Internet Exploder中完成。
我还发现这个http://petesbloggerama.blogspot.com/2007/02/firefox-ie-word-wrap-word-break-tables.html隐藏在我的书签中,这表明可以解决大多数其他浏览器的问题,这可能有所帮助。
CSS3会很棒,如果它来到这里......
希望有所帮助,有兴趣看看你想出了什么。对不起,我不能提供任何测试或更具体的内容。
答案 3 :(得分:0)
在PHP中使用正则表达式可以更快地分解长词。我已经创建了一个函数来处理htmlspecialchars并用&amp; shy分解单词;这是任何感兴趣的人的功能。只需传递字符串,以及最大字长(如果你不想用&amp; shy分解单词,则保留为0),它将返回一个字符串,其中包含转换后的html特殊字符,以及&amp; shy; < / p>
function htmlspecialchars2($string = "", $maxWordLength = 0)
{
if($maxWordLength > 0)
{
$pattern = '/(\S{'.$maxWordLength.',}?)/';
$replacement = '$1­';
$string = preg_replace($pattern, $replacement, $string);
}
//now encode special chars but dont encode ­
$string = preg_replace(array('/\&(?!shy\;)/','/\"/',"/\'/",'/\</','/\>/'), array('&','"',''','<','>'), $string);
return $string;
}
答案 4 :(得分:0)
您可以使用表格布局+自动换行CSS属性,该属性现在可以在IE7-8和FF3.5中使用。它不会解决问题,但至少你的设计不会被打破。
答案 5 :(得分:0)
如果需要根据组件的高度和宽度自动换行文本,请在css中使用 white-space:normal ,希望这可能对你有所帮助。
答案 6 :(得分:0)
非常类似于Owen的回答,这在一行中实现了服务器端的相同功能:
return preg_replace_callback( '/\w{10,}/', create_function( '$matches', 'return chunk_split( $matches[0], 5, "​" );' ), $value );
答案 7 :(得分:0)
这可以解决您的问题
function htmlspecialchars2($string = "", $maxWordLength = 0){
return wordwrap($string , $maxWordLength,"\n", true);
}