2012-06-02 58 views
10

我從文件中抓取輸入下面的代碼爲什麼php trim不是真的刪除所有的空白和換行符?

$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh), " \t\n\r")))); 

我也事先嚐試了這些在排除

$jap= str_replace("\n","",addslashes(strtolower(trim(fgets($fh))))); 
$jap= addslashes(strtolower(trim(fgets($fh), " \t\n\r"))); 

,如果我回聲$ JAP它看起來很好,所以在後面的代碼,沒有任何其他改動$ JAP它插入到數據庫,但是我注意到一個對比測試來檢查,如果這個日本鬼子已經在DB返回false時,我可以清楚地看到,JAP的一個看似完全一樣的條目是在DB 。所以我複製插入正確的phpmyadmin從或者從我的網站在顯示JAP並粘貼到記事本我注意到它粘貼這樣的JAP項...(這是一種精確粘貼到下面引號)

バスにのって,うみへ行きました」

,顯然我需要的,它沒有說白了空間和休息或不管它是什麼。

所以據我可以告訴微調是沒有做什麼它說到做到。或者在這裏錯過了一些東西如果是的話是什麼?

UPDATE: 至於傑克回答

preg_replace函數沒有幫助,但這裏是我做什麼,我所用的 BIN2HEX()來確定該部分說:「這不是我想要的部分」是 efbbbf 我這樣做,採取JAP $到海峽替換和刪除我期待找到日語,還剩下什麼進入BIN2HEX。其結果是上面的「efbbbf」

echo bin2hex(str_replace("どちらがあなたの本ですか","",$jap)); 

以上的產量efbbbf 但它是什麼?我可以讓str_replace刪除這個不知何故?

+2

那是什麼'addslashes'呢?並且請不要說它是針對數據庫的。 – mario

+1

你是否試過'trim($ str)',沒有第二個參數?按[手動](http://php.net/trim),您的版本將不會刪除NUL字節和垂直選項卡(無論是「垂直標籤」是...)[裁剪unicode的空白在 – bfavaretto

+1

可能重複PHP的5.2](http://stackoverflow.com/questions/4166896/trim-unicode-whitespace-in-php-5-2) – mario

回答

14

trim功能不知道Unicode的空格。你可以試試這個:

preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $str); 

正如摘自:Trim unicode whitespace in PHP 5.2

否則,你可以做一個bin2hex(),找出在前面被添加了什麼角色。

更新

你的文件包含UTF8 BOM;將其刪除:

$f = fopen("file.txt", "r"); 
$s = fread($f, 3); 
if ($s !== "\xef\xbb\xbf") { 
    // bom not found, rewind file 
    fseek($f, 0, SEEK_SET); 
} 
// continue reading here 
+0

preg_replace沒有幫助,但這裏是我所做的,我用 bin2hex()來確定「不是我想要的部分」的部分是 efbbbf 我這樣做是通過將$ jap放入str替換並刪除日本人期待找到,剩下的東西進入bin2hex。其結果是上面的「efbbbf」 echo bin2hex(str_replace(「どちらがあなたの本ですか」,「」,$ jap)); – user1397417

+0

@ user1397417認爲我找到了。你的文件包含一個UTF8 BOM表頭。更新了我的答案。 –

+0

您的更新的解決方案看起來像解決了我的問題,謝謝!我會點擊「這個答案對你有用」,但它說它需要「15聲望」對不起 – user1397417

相關問題