PHP函数trim()无法从字符串中间删除空格

8

我有一些非常简单直接的代码,但是出了点问题。以下是代码:

$title = $_POST['templatename'];
$user = $_POST['username'];
$selectedcoordinates = $_POST['templatestring'];

$title = trim($title);
$user = trim($user);


$filename = $title . "_by_" . $user;

var_dump($title);
var_dump($user);
var_dump($filename);

返回这个:

string(11) "Single Tile"
string(6) "Author"
string(21) "Single Tile_by_Author" 

这里的值来自HTML表单,为什么"Single Tile"没有变成"SingleTile"


trim 应该从字符串的开头和结尾进行修剪。 - Nouphal.M
trim仅适用于边缘的空格" "。"some text " ==> "some text" - justtal
使用trim()函数,可以从一个语句的开头和结尾去除空格,而不是每个单词的开头和结尾。 - Janaka R Rajapaksha
8个回答

11

函数trim()仅从字符串开头和结尾去除空格(以及控制字符如 \n)。

$title = str_replace(" ", "", trim($title));
$user = str_replace(" ", "", trim($user));

我只是想解决这个问题,所以解决方案可能看起来不好。无论如何,最好的使用方式是这样的:

$title = str_replace(" ", "", $title);
$user = str_replace(" ", "", $user);

我删除了trim()函数,因为str_replace()可以完成trim()的工作。


1
trim函数还会删除\n\r\t - Daniel W.
为什么在删除所有空格之前要修剪(trim)字符串?这不合逻辑。 - Tobias
这解决了我的问题!一旦 StackOverflow 允许我,我会接受答案。谢谢。 - user3195417

1
 array('username','filter','filter'=>'trim')
array('templatename','filter','filter'=>'trim')

在规则中添加上述行:


1

让我们不仅替换空格,还要替换所有ASCII控制字符

例如:空格 Tab 行尾符

$str = preg_replace("/[\\x0-\x20\x7f]/", '', $str);

0

答案很简单。首先,你需要对函数trim()的基本功能有一定的了解。

该函数的语法是:

trim(字符串,字符列表);

第二个参数是可选的。如果存在,它会从字符串两端移除在字符列表中出现的字符。

示例:

$str="beautiful day";
echo trim($str, "aby");

输出:

eautiful d

从字符串的两端删除字母aby

但是,如果省略第二个参数,则从字符串两端删除以下字符。

"\0" - NULL
"\t" - tab
"\n" - new line
"\x0B" - vertical tab
"\r" - carriage return
" " - ordinary white space

在您的情况下,输出为:

string(11) "Single Tile" string(6) "Author" string(21) "Single Tile_by_Author" 

SingleTile_by_Author之间的空格仅在两端删除空格时保留为白色空格。


0

Trim 只会去除开头和结尾的空格,不会去除所有空格。

str_replace(' ','',$string);

去除所有空格


0

http://www.php.net/manual/zh/function.trim.php trim — 从字符串的开头和结尾删除空格(或其他字符)

这意味着 trim 只会删除字符串末尾和开头的空格,而不是字符串内部的空格。您可以尝试以下操作:

$title = str_replace(' ','',$title);

0

Trim 用于边缘。

只需使用:

$title = str_replace(' ', '', $title);
$user = str_replace(' ', '', $user);;

因为 OP 只想要解释他的方法,而不是任何替代方法。 - user8140418

0
你可以使用 str_replace() 函数,该函数可以返回一个字符串或一个数组,其中所有出现在主题中的搜索项都被替换为给定的替换值。
  $title = str_replace(' ', '', $title);

语法:str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

search

被搜索的值,也称为针头。可以使用数组来指定多个针头。

replace

替换已找到的搜索值的替换值。可以使用数组来指定多个替换值。

subject

被搜索和替换的字符串或数组,也称为干草堆。

如果 subject 是一个数组,则对 subject 的每个条目执行搜索和替换,并且返回值也是一个数组。

了解更多信息:http://in3.php.net/str_replace


任务只是去除空格,那么为什么要同时使用 trim 和 str_replace? - Tobias
对我来说很愉快 :D - Tobias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接