我有修剪问题:
print_r($c);
print_r(trim($c,'[]'));
结果:
[left]
left]
修剪文档说:
character_mask 可选地,剥离的字符也可以 使用character_mask参数指定。只需列出所有 要删除的字符。用..你可以指定一个 字符范围。
那么为什么它不会删除]
?
好吧很明显我在字符串的末尾有一个额外的隐形字符。
但它是如何出现的?
我有一系列新的订单项,我会像这样爆炸:
$content = explode("\n", $content);
为什么仍然会在字符串的末尾?
答案 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."