2014-03-12 71 views
1

在我的laravel應用程序中,我試圖修剪從數據庫中獲得的結果。 trim()不會刪除字符串中的最後一個空格。laravel查詢結果是否被編碼?

的代碼是這個

$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

A dot在瀏覽器上(作爲倒數第二個字符)出現幾乎一秒鐘,然後消失。現在,發生了什麼事?這是爲什麼發生?

請給我指導,否則我就要離開我的腦海了!

更新:

這是可變$str轉儲 -

string(21) "Vidyalankar Classes " 
+0

我只是試圖做同樣的在我的laravel 4.1應用。 而且我的字符串沒有額外的空間。 – oBo

+0

請顯示實際的代碼,而不是「類似」......您的示例沒有修剪,因此很難看到可能出現問題的地方。 –

+0

@PhillSparks完成。它與修剪沒有多大關係。我提到它只是爲了創建基地。問題肯定是別的。 – halkujabra

回答

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的開頭和結尾剝離了空格。如果沒有第二個參數,修剪()將剝離這些字符:

" " (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"); 
+0

修剪不適用於非UTF8字符? – halkujabra

+0

@ user1708762更新了答案。 – majidarif

+0

按預期工作 – halkujabra