我正在写一个WordPress插件,其中一个功能是删除重复的空格。用preg_replace匹配重复的空格
我的代码如下所示:
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+, [ ]+
等 - 即使有一个空字符串替换所有单个空格,不会取代空间
我已经添加了一个例子,代码的结果在这里:http://pastebin.com/hm2JMX2w我用'R'代替了空格,所以它会更清楚什么被替换,什么是'吨。我正在使用WordPress的LAMP新安装,似乎解决了unicode问题。 – jjeaton 2010-07-09 04:18:11
有没有另一种解决方案,我错过了,不使用正则表达式? – jjeaton 2010-07-09 23:19:12