在我的laravel应用程序中,我正在尝试修剪从数据库中获得的结果。 trim()不会删除字符串中的最后一个空格。
代码是这个
$institutes = Institute::all();
foreach ($institutes as $institute) {
$str = $institute->name;
$str = trim($str); //doesn't remove the trailing space
$len = strlen($str);
}
现在,首先,$str
的长度比应有的长1。它应该是20
,但它以某种方式显示21
。另一件事,根据我的输入,最后一个字符是space
。
当我尝试打印最后一个(第21个)和倒数第二个(第20个)时 - 最后一个字符(甚至不应该在那里)和第二个应该是space
的最后一个字符结果是类似于this。
浏览器上的dot
(作为倒数第二个字符)出现差不多一秒钟,然后消失。现在,发生了什么?为什么会这样?
请给我指示,否则我会忘记!
更新:
这是变量$str
-
string(21) "Vidyalankar Classes "
答案 0 :(得分:3)
我觉得你所指的尾随空格是非utf8字符。
请尝试删除所有无效字符,而不是修剪。
foreach ($institutes as $institute) {
$str = $institute->name;
// be careful, try to double check, might also remove valid utf 8 characters like Chinese characters.
$str = preg_replace('/[^(\x20-\x7F)]*/','', $str);
$len = strlen($str);
}
参考trim文档。
此函数返回一个字符串,其中从str的开头和结尾剥去了空格。如果没有第二个参数,trim()将删除这些字符:
" " (ASCII 32 (0x20)), an ordinary space.
"\t" (ASCII 9 (0x09)), a tab.
"\n" (ASCII 10 (0x0A)), a new line (line feed).
"\r" (ASCII 13 (0x0D)), a carriage return.
"\0" (ASCII 0 (0x00)), the NUL-byte.
"\x0B" (ASCII 11 (0x0B)), a vertical tab.
您还可以尝试其他方法,例如
$str = preg_replace('/[^A-Za-z0-9\. -]/','', $str);
// using trim, trims off invalid characters
$str = trim($str, "\x20..\x7F");