laravel查询结果是否已编码?

时间:2014-03-12 12:29:13

标签: php laravel-4

在我的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 "

1 个答案:

答案 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");