php - 在 UTF8 单词之间插入空格 - 我的 2 个简单正则表达式有什么问题?

标签 php regex preg-replace preg-match

我有a web page用户可以在其中用俄语 (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);
            }

但是这不起作用,并且至少有两个问题

  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

最佳答案

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

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

关于php - 在 UTF8 单词之间插入空格 - 我的 2 个简单正则表达式有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10883402/

相关文章:

PHP。联系表格错误更改文本区域的颜色而不重定向

python - 使用 python 从文本文件中仅获取第一行的正则表达式代码

Python:用于识别与模式匹配的所有子文件夹的函数

php - preg_replace 没有在引用中转义 "?"

php - UTF-8 PHP 将不可打印字符 "space"替换为不可打印字符 "line break"

php - 如何使用 Laravel、Bootstrap Modal 和 Ajax 将数据发布和插入数据库

php - Twitter Bootstrap HTML 表单单选按钮不适用于 PHP POST

PHP preg_replace_callback() 和 create_function() 与 eval() 不起作用

javascript - 即使验证正则表达式错误也提交表单

php - 奇怪的preg_replace行为将字符变成数字