我需要规范化字符串中的空格:
E.g。 " my name is "
=> my name is
我试过
str_replace(' ',' ',$str);
我也试过了php Replacing multiple spaces with a single space,但这也没有用。
答案 0 :(得分:12)
用一个空格替换任何出现的2个或更多空格,并修剪:
$str = preg_replace('/ {2,}/', ' ', trim($input));
注意:在这里使用空白字符类\s
是一个相当糟糕的主意,因为它会匹配换行符和您可能不期望的其他空格。
答案 1 :(得分:0)
你应该尝试preg_replace! (假设您理解正则表达式,对于这种情况应该不是很复杂)。
答案 2 :(得分:0)
使用正则表达式
$text = preg_replace("~\\s{2,}~", " ", $text);
答案 3 :(得分:0)
\s
方法也会删除换行符,并且/ {2,}/
方法会在换行符后的行尾忽略制表符和空格。
如果您想保存换行符并获得更准确的结果,我建议this impressive answer to similar question和this improvement of the previous answer。根据他们的说明,你的问题的答案是:
$norm_str = preg_replace('/[^\S\r\n]+/', ' ', trim($str));
简而言之,这是利用双重否定。阅读链接以深入解释这个技巧。