我从数据库查询中获得了一个字符串,然后我在将其放入CSV文件之前删除了所有的HTML标签、回车和换行符。唯一的问题是,我找不到一种方法来删除字符串之间的多余空格。
如何最好地删除内部的空格字符?
我从数据库查询中获得了一个字符串,然后我在将其放入CSV文件之前删除了所有的HTML标签、回车和换行符。唯一的问题是,我找不到一种方法来删除字符串之间的多余空格。
如何最好地删除内部的空格字符?
不确定您需要什么,但这里有两种情况:
如果您只是处理字符串开头或结尾的多余空格,可以使用 trim()
、 ltrim()
或 rtrim()
来去除它。
如果您要处理字符串内部额外的空格,请考虑使用 preg_replace
将多个空格 " "*
替换为单个空格 " "
。
示例:
$foo = preg_replace('/\s+/', ' ', $foo);
$foo = preg_replace( '/\s+/', ' ', $foo );
将会破坏 nl2br()
的效果。 - Waiyl Karim$str = str_replace(' ','',$str);
或者,用下划线、& nbsp;等替换。
其他示例都没有对我起作用,所以我使用了这个:
trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))
这将所有制表符、换行符、双空格等替换为简单的一个空格。
\s+
时遇到了问题。虽然那是在2014年的事情,也许现在已经改变了,我已经三年没有接触PHP了,无法发表评论,但会保留当前答案,因为它曾经是一个解决方案,在某些情况下仍然可能有效。 - Lukas Liesis$str = trim(preg_replace('/\s+/',' ', $str));
这行代码将会移除 额外的 空格,以及字符串开头和结尾的空格。
"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;
$str = preg_replace('/[\s]+/', ' ', $str);
您可以使用:
$str = trim(str_replace(" ", " ", $str));
这个功能会从字符串的两侧移除额外的空格,并且在字符串内部将两个空格转换为一个。请注意,这不会将连续三个或更多的空格转换为一个! 另一种我可以建议的方法是使用implode和explode,这是更安全但不太理想的方法!
$str = implode(" ", array_filter(explode(" ", $str)));
我的建议是使用本地for循环或正则表达式来完成这种任务。
使用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;
}
? productID =26%20via%20@LFS
$productID=preg_replace('/[\s]+.*/','',$productID);
Laravel 9.7 引入了新的 Str::squish()
方法,用于删除多余的空格,包括单词之间的多余空格:https://laravel.com/docs/9.x/helpers#method-str-squish