Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php修剪函数不使用';t带最后一个字符_Php - Fatal编程技术网

php修剪函数不使用';t带最后一个字符

php修剪函数不使用';t带最后一个字符,php,Php,我对修剪有问题: print_r($c); print_r(trim($c,'[]')); 结果: [left] left] Trim文档说明: 字符掩码可选地,剥离字符也可以 使用character\u mask参数指定。简单地列出所有 要删除的字符。具有您可以指定 字符范围 那么为什么它不删除] 很明显,我在字符串的末尾有一个额外的不可见字符 但是它是如何出现在那里的呢 我有一系列新行项目,我像这样分解: $content = explode("\n", $content); 为什么\

我对修剪有问题:

print_r($c);
print_r(trim($c,'[]'));
结果:

[left]
left]
Trim文档说明:

字符掩码可选地,剥离字符也可以 使用character\u mask参数指定。简单地列出所有 要删除的字符。具有您可以指定 字符范围

那么为什么它不删除
]

很明显,我在字符串的末尾有一个额外的不可见字符

但是它是如何出现在那里的呢

我有一系列新行项目,我像这样分解:

$content = explode("\n", $content);

为什么\n仍然保留在字符串的末尾?

我建议您在字符串的末尾,在
]
之后有一些您没有看到的东西。首先,用以下方法确认这一理论:

var_dump($c);
…如果这为您提供了除
字符串(6)“[左]”
以外的任何内容,则确认字符串末尾存在不可见/不可打印的字符

在这种情况下,很有可能是正常的空白,标准的
trim()
函数会删除它。因此,不要覆盖其参数,而是将您的字符添加到掩码:

trim($c, " \t\n\r\0\x0B[]");
(请注意此处对双引号字符串的更改。)


正如您所说,您在
\n
上使用
explode()
,并且有一个
\r
剩余,我建议采用的答案是使用
preg\u split()
而不是
explode()
,因此在换行时处理CRLF对和单个LF字符

.如果您
var\u dump($c)
,会发生什么情况?它有你期望的长度吗?我猜在这根绳子的末端还有其他看不见的东西;也许是马车回程,或者类似的。查看是否
trim(trim($c),“[]”)
解决了这个问题——如果是这样,则在结束方括号后有一个标准空白字符。(如果这样做有效,您可以通过使用
trim($c,“\t\n\r\0\x0B[]”;
)@MattGibson隐身字符来节省对trim的两次调用。非常感谢!1个问题,我确实使用explode on \n创建了我的项目数组,其中包括[left],但explode on \n应该删除该字符吗?它没有@Slaven如果你在windows上,换行符通常是这样的:
\r\n
,这意味着即使你拿走了
\n
,仍然有一个
\r
。@Thorbear我在mac上,但是OSs之间有区别吗?@Slaven这取决于文件的来源,实际上,以及它一直在哪里。Windows通常使用
\r\n
(CRLF)来表示行结束,基于Unix的机器(如Mac和Linux)通常只使用
\n
(单行换行,而不是回车换行)。在大多数情况下,您可能最好掩盖自己的屁股并同时处理这两种情况。使用
preg_split
而不是
explode
来处理拆分阶段的两种情况。