Php 删除字符串中多余的空白
我从数据库查询中收到一个字符串,然后在将其放入CSV文件之前删除所有HTML标记、回车和换行符。唯一的问题是,我找不到一种方法来删除字符串之间多余的空白 删除内部空白字符的最佳方法是什么Php 删除字符串中多余的空白,php,string,Php,String,我从数据库查询中收到一个字符串,然后在将其放入CSV文件之前删除所有HTML标记、回车和换行符。唯一的问题是,我找不到一种方法来删除字符串之间多余的空白 删除内部空白字符的最佳方法是什么 $str = str_replace(' ','',$str); 或者,替换为下划线;等等。不确定您到底想要什么,但有两种情况: 如果您只是处理字符串开头或结尾多余的空格,可以使用trim()、ltrim()或rtrim()将其删除 >P>如果您在一个字符串中处理额外的空格,请考虑一个“多个白皮书 >“*>
$str = str_replace(' ','',$str);
或者,替换为下划线;等等。不确定您到底想要什么,但有两种情况:
trim()
、ltrim()
或rtrim()
将其删除$foo = preg_replace('/\s+/', ' ', $foo);
$str=trim(preg_replace('/\s+/','$str))代码>
上面的代码行将删除额外的空格,以及前导空格和尾随空格。为了扩展Sandip的答案,我在日志中显示了一组以bit.ly错误编码的字符串。他们打算只对URL进行编码,但在空格后放一个twitter句柄和其他东西。看起来像这样
? productID =26%20via%20@LFS
通常情况下,这不会是一个问题,但我得到了很多SQL注入尝试,所以我将任何无效ID重定向到404。我使用preg_replace方法将无效的productID字符串转换为有效的productID
$productID=preg_replace('/[\s]+.*/','',$productID);
我在URL中查找一个空格,然后删除其后的所有内容。其他示例都不适用于我,因此我使用了以下示例:
trim(preg_replace('/[\t\n\r\s]+/', ' ', $text_to_clean_up))
这会将所有制表符、新行、双空格等替换为简单的1空格。如果您只想替换字符串中的多个空格,例如:“此字符串有很多空格。”
你希望答案是
“此字符串有很多空间”
,您可以使用以下解决方案:
$strng = "this string have lots of space . ";
$strng = trim(preg_replace('/\s+/',' ', $strng));
echo $strng;
如果从用户输入[或其他不受信任的来源]获取有效负载,则使用preg_replace()存在安全缺陷。PHP使用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;
}
您可以使用:
$str = trim(str_replace(" ", " ", $str));
这将从字符串的两侧删除额外的空格,并将字符串中的两个空格转换为一个。请注意,这不会将一行中的三个或更多空格转换为一个!
我可以建议的另一种方法是使用内爆和爆炸,这是更安全的,但完全不是最佳的
$str = implode(" ", array_filter(explode(" ", $str)));
我的建议是使用原生for循环或使用regex来完成这类工作。$str=“我是一名PHP开发人员”;
$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);
$str_length=strlen($str);
$str_arr=str_split($str);
对于($i=0;$i<$str_length;$i++){
如果(isset($str_arr[$i+1])&$str_arr[$i]=''&&$str_arr[$i]==$str_arr[$i+1]){
未结算($str_arr[$i]);
}
否则{
继续;
}
}
回波内爆(“,$str_arr);
我最近写了一个简单的函数,它可以在没有正则表达式的情况下从字符串中删除多余的空格内爆(“”,array\u filter(explode(“”,$str))
请发布一个原始字符串和所需字符串的示例。您还可以澄清最终输出需要如何处理吗?您是否将逗号插入CSV数据中,从已包含逗号的数据库中获取数据,将字符串输入到处理CSV插入的函数中,等等?好的,最终输出需要是一个字符串,每个单词由一个空格分隔,目前它是多个空格。@Joe,我不会浪费时间,我会开始赞扬所有曾经帮助过你的人$foo=preg_replace('/\s+/','$foo);使用$foo=preg_替换('/\s+/','$foo)
将消除nl2br()的影响。
在使用preg\u replace之前只需使用nl2br,您应该可以使用。Typo/Escaper注意-如果代码没有为您删除额外的空白,请确保在“s”之前有“\”:)一些在线php测试页面将其删除:)这应该是CSS安全的,对吗?如中所示,这将安全地压缩包含一个长的多行CSS字符串的变量?这将删除所有空白。他只是想让字符串正常化。我想要的是@Gigala(尽管这不是问题)@Gigala“删除内部空白字符的最佳方法是什么?”这是一个问题。“这个答案完全满足了这一点。”对于最后一句话,科莱德说得对。但在导言中,这个问题被表述为“多余的空格”,重点是多余的空格。你最终解决了OP的实际问题,所以这没什么大不了的,但只要我们对它有技术性的了解……如果空间数是偶数,这就行不通了,比如说:Hi Earth
,中间有4个空间将变成:HiEarth
。这并不能解决我与该问题相关的问题。谢谢,@wp78de,但出于任何原因,我只与\s+
有问题。虽然它早在2014年,所以可能已经更改了,在过去3年中没有接触过PHP,不能发表评论,但会留下当前的答案,因为它是一个解决方案,在某些情况下可能仍然是。如果您指定“e”修改器,它只会使用eval执行它:它还说“此功能在PHP5.5.0中被弃用,并从PHP7.0.0起被删除。”因此,您无法在preg_replace中对内容进行求值。如果空间长度超过两个空间,则无法正确转换多个空间。
$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);