php trim函数不会删除最后一个字符

时间:2014-02-13 08:44:24

标签: php

我有修剪问题:

print_r($c);
print_r(trim($c,'[]'));

结果:

[left]
left]

修剪文档说:

  

character_mask 可选地,剥离的字符也可以   使用character_mask参数指定。只需列出所有   要删除的字符。用..你可以指定一个   字符范围。

那么为什么它不会删除]

好吧很明显我在字符串的末尾有一个额外的隐形字符。

但它是如何出现的?

我有一系列新的订单项,我会像这样爆炸:

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

为什么仍然会在字符串的末尾?

1 个答案:

答案 0 :(得分:3)

我建议您在]之后的字符串末尾还有其他内容,而您还没有看到。首先,用以下方法证实这一理论:

var_dump($c);

...如果它为您提供除string(6) "[left]"以外的任何内容,那么确认字符串末尾有不可见/不可打印的字符。

在这种情况下,机会很好,它只是正常的空格,标准的trim()函数会被删除。因此,不要覆盖其normal $character_mask参数,而是将您的角色添加到蒙版:

trim($c, " \t\n\r\0\x0B[]");

(注意对to allow the escape sequences to be interpreted properly的双引号字符串的更改。)

正如您所说explode() \n使用\r并且遗留了preg_split(),我建议您使用this question的答案来使用{{ 1}}而不是explode(),因此在处理换行时应对CRLF对和单个LF字符。 "Be liberal in what you accept from others."