2014-03-12 4 views
1

내 laravel 앱에서 데이터베이스에서 얻은 결과를 잘라내려고합니다. trim()은 문자열의 마지막 공간을 제거하지 않습니다.laravel 쿼리 결과가 인코딩 되었습니까?

코드는 우선, $str의 길이는 그것이 있어야하는 것보다 하나 더있다, 지금이

$institutes = Institute::all(); 

foreach ($institutes as $institute) { 
    $str = $institute->name; 
    $str = trim($str); //doesn't remove the trailing space 
    $len = strlen($str); 
} 

입니다. 그것은 20이어야하지만 어떻게 든 21을 보여줍니다. 또 다른 한가지, 마지막 문자는 내 입력에 따라 space입니다.

최종 (21 번째) 및 두 번째 마지막 (20 번째) 문자 - 마지막 문자 (거기에 없어야 함)와 space이어야하는 두 번째 마지막 문자를 인쇄하려고하면 this.

브라우저의 dot (두 번째 마지막 문자로 표시)이 거의 1 초 동안 표시된 다음 사라집니다. 자, 무슨 일 이니? 왜 이런 일이 일어나는 걸까요?

제게 지시 사항을 주시거나 제 마음에서 벗어날 것입니다!

업데이트 :

이 변수 $str의 덤프입니다 - 당신이 언급하는 후행 공백이 아닌 UTF8 문자하다는 느낌이

string(21) "Vidyalankar Classes " 
+0

처럼, 또 다른 접근 방법을 시도 할 수 있습니다 신청. 내 문자열에는 추가 공간이 없습니다. – oBo

+0

"비슷한 것"이 아닌 실제 코드를 보여주십시오 ... 예제에 트리밍이 없으므로 어디에서 잘못 될 수 있는지 알기가 어렵습니다. –

+0

@PhillSparks 완료. 그것은 트리밍과 관련이 없습니다. 나는 기초를 창조하기 위하여 그것을 다만 언급했다. 문제는 분명히 다른 것입니다. – halkujabra

답변

3

.

트리밍 대신 잘못된 문자를 모두 제거해보십시오.


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. 

또한 난 그냥 내 laravel 4.1에서 동일한 작업을 수행하려고

$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