我从数据库查询中收到一个字符串,然后在将其放入CSV文件之前删除所有HTML标记,回车符和换行符。唯一的问题是,我找不到从字符串之间的中删除多余空格的方法。
删除内部空白字符的最佳方法是什么?
答案 0 :(得分:269)
不确定你想要什么,但这里有两种情况:
如果您只是在字符串的开头或结尾处理多余的空格,则可以使用trim()
,ltrim()
或rtrim()
来删除它。
如果您正在处理字符串中的额外空格,请考虑使用单个空格 {preg_replace
多个空格 " "*
{1}}。
示例:强>
" "
答案 1 :(得分:48)
$str = str_replace(' ','',$str);
或者,用下划线代替& NBSP;等等。
答案 2 :(得分:22)
$str = trim(preg_replace('/\s+/',' ', $str));
上面的代码行将删除额外的空格,以及前导和尾随空格。
答案 3 :(得分:21)
没有其他例子对我有用,所以我用过这个:
trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))
这会将所有制表符,新行,双倍空格等替换为简单的1个空格。
答案 4 :(得分:8)
如果您只想替换字符串中的多个空格,例如:"this string have lots of space . "
你希望得到答案
"this string have lots of space"
,您可以使用以下解决方案:
$strng = "this string have lots of space . ";
$strng = trim(preg_replace('/\s+/',' ', $strng));
echo $strng;
答案 5 :(得分:4)
$str = preg_replace('/[\s]+/', ' ', $str);
答案 6 :(得分:3)
如果从用户输入(或其他不受信任的来源)获得有效负载,则使用preg_replace()会有安全缺陷。 PHP使用eval()执行正则表达式。如果未正确清理传入的字符串,则您的应用程序可能会遭受代码注入。
在我自己的应用程序中,我没有烦恼清理输入(并且因为我只处理短字符串),而是做了一个处理器密集型功能,尽管它是安全的,但它没有任何eval()功能,因此它是安全的。
function secureRip(string $str): string { /* Rips all whitespace securely. */
$arr = str_split($str, 1);
$retStr = '';
foreach ($arr as $char) {
$retStr .= trim($char);
}
return $retStr;
}
答案 7 :(得分:2)
您可以使用:
$str = trim(str_replace(" ", " ", $str);
此删除字符串两端的多余空格,并将字符串中的多个空格转换为一个。
答案 8 :(得分:1)
为了扩展Sandip的答案,我在日志中出现了一堆字符串,这些字符串在bit.ly中被错误编码。他们的意思是只对URL进行编码,但在空格之后放置一个推文句柄和其他一些东西。它看起来像这样
? productID =26%20via%20@LFS
通常情况下,这不是问题,但是我会进行大量的SQL注入尝试,因此我将任何非有效ID的内容重定向到404.我使用preg_replace方法生成无效的productID将字符串转换为有效的productID。
$productID=preg_replace('/[\s]+.*/','',$productID);
我在网址中查找空格,然后删除其后的所有内容。
答案 9 :(得分:0)
$str = "I am a PHP Developer";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
if (isset($str_arr[$i + 1]) && $str_arr[$i] == ' ' && $str_arr[$i] == $str_arr[$i + 1]) {
unset($str_arr[$i]);
}
else {
continue;
}
}
echo implode("", $str_arr);
答案 10 :(得分:0)
我最近编写了一个简单的函数,该函数无需使用正则表达式implode(' ', array_filter(explode(' ', $str)))
即可从字符串中删除多余的空格。