2

我有一个网页,用户可以在其中以俄语 (UTF-8) 发表评论,如下所示:

Хорошо, четко , уверено!Удачи!(БОРИС)

一些用户为了好玩而“滥用”它,省略了单词之间的空格

НеСпитьсяЖукуНиЗимою,НиЛетом,лучшеПитатьсяСолнечнымСветом, лучшеСидетьЗаИгорнымСтолом,иНаслаждатьсяКаждымВистом, лучшеНоситьЗолотыеОдежды,искритьсяВсегда,неТеряяНадежды,лучшеПустьДругОстаетсяБезВзятки,ведьНевозможноЖукуЖитьБезЛапки!

这导致非常宽的 HTML 表格行,破坏了我的布局。

我试图通过尝试查找包含超过 60 个非空格字符的评论并在标点符号(如逗号)之后插入一个空格字符来对抗这些用户 - 使用这段 PHP 代码:

            if (preg_match('/\S{60,}/u', $about) == 1) {
                    error_log('Splitting comment: ' . $about);
                    $about = preg_replace('/(\p{P}+\s*)/u', '$1 ', $about);
                    error_log('===Result comment: ' . $about);
            }

然而这不起作用并且至少有2个问题

  1. 每个评论都被匹配,即使是顶部的简短评论
  2. \s* 不是贪心的,“逗号和空格”被“逗号空格”替换,原因很奇怪

这是我的日志文件的摘录:

[04-Jun-2012 09:50:10] Splitting comment: Хорошо, четко , уверено!Удачи!(БОРИС)
[04-Jun-2012 09:50:10] ===Result comment: Хорошо,  четко ,  уверено! Удачи!( БОРИС)

[04-Jun-2012 09:50:10] Splitting comment: НеСпитьсяЖукуНиЗимою,НиЛетом,лучшеПитатьсяСолнечнымСветом,
лучшеСидетьЗаИгорнымСтолом,иНаслаждатьсяКаждымВистом, лучшеНоситьЗолотыеОдежды,искритьсяВсегда,неТеряяНадежды,лучшеПустьДругОстаетсяБезВзятки,ведьНевозможноЖукуЖитьБезЛапки!(nusja)
[04-Jun-2012 09:50:10] ===Result comment: НеСпитьсяЖукуНиЗимою, НиЛетом, лучшеПитатьсяСолнечнымСветом,
 лучшеСидетьЗаИгорнымСтолом, иНаслаждатьсяКаждымВистом,  лучшеНоситьЗолотыеОдежды, искритьсяВсегда, неТеряяНадежды, лучшеПустьДругОстаетсяБезВзятки, ведьНевозможноЖукуЖитьБезЛапки!( nusja)

我尝试将反斜杠加倍 - 这并没有改变任何东西。

我正在使用带有最新 CentOS Linux 5.x 和 6.x 的股票 PHP:

# php -v
PHP 5.3.3 (cli) (built: May  7 2012 17:58:11)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
4

2 回答 2

3

试试wordwrap()。这是一个内置函数,我认为它应该对您有所帮助。

如果您正在寻找 reg-exp 解决方案,评论中有一个 -看这里。它是 UTF-8 安全的,因此它应该适用于您的俄罗斯网站。

于 2012-06-04T15:03:10.943 回答
1

您可以将注释放在 span 或 div 元素中。

<td><span class="comment">лучшеПитатьсяСолнечнымСветом</span></td>

并将以下定义放入您的 css 文件中:

span.comment
{
    max-width: 300px;
    overflow: hidden;
}

这将简单地隐藏任何比您预期更大的东西。

于 2012-06-04T15:12:54.660 回答