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
来处理拆分阶段的两种情况。