【发布时间】:2011-03-09 09:56:57
【问题描述】:
我正在编写一个 WordPress 插件,其中一个功能是删除重复的空格。
我的代码如下所示:
return preg_replace('/\s\s+/u', ' ', $text, -1, $count);
我不明白为什么我需要
u修饰符。我看过其他插件 使用preg_replace并且不使用 需要为 Unicode 修改它。一世 相信我有默认安装 WordPress 的。没有修饰符,代码 用 Unicode 替换所有空格 替换字形而不是空格。
使用
u修饰符,我不明白 字形,它不会替换所有的空格。
下面的每个空格都有 1-10 个空格。正则表达式仅从每个组中删除空间。
之前:
This sentence has extra space. This doesn’t. Extra space, Lots of extra space.
之后:
This sentence has extra space. This doesn’t. Extra space, Lots of extra space.
$count = 9
如何让正则表达式用一个空格替换整个匹配项?
更新:如果我用普通的 php 试试这个,效果很好
$new_text = preg_replace('/\s\s+/', ' ', $text, -1, $count);
只有当我在 wordpress 插件中使用它时它才会中断。 我在过滤器中使用这个函数:
function jje_test( $text ) {
$new_text = preg_replace('/\s\s+/', ' ', $text, -1, $count);
echo "Count: $count";
return $new_text;
}
add_filter('the_content', 'jje_test');
我试过了:
- 删除 the_content 上的所有其他过滤器
remove_all_filters('the_content'); - 更早或更晚更改添加到 the_content 的过滤器的优先级
-
\s+, \s\s+, [ ]+等各种排列方式 - 即使用空字符串替换所有单个空格,也不会替换空格
【问题讨论】:
-
我已经添加了一个示例,代码和结果在这里:pastebin.com/hm2JMX2w 我用
R代替了空格,这样可以更清楚地知道什么被替换了,什么没有被替换.我正在使用新安装的带有 WordPress 的 LAMP,这似乎已经解决了 unicode 问题。 -
这里有没有我错过的不使用正则表达式的解决方案?