2012-08-14 119 views
8

我使用jQuery指望飛一個textarea的值:獲得相同的結果爲PHP``str_len作爲jQuery的`.VAL()長()`

function count_chars() { 
    count_chars=$('#text_textarea').val().length; 
} 

...然後在提交序列化表單,通過ajax發送textarea的文本到一個php文件,然後驗證服務器端的文本。但是,我遇到了換行符和空格問題。

當然,如果我只是從textarea中得到「原樣」的文字,php會將每一個新行計爲2或4個字符(\n,...)。所以,我試圖像這樣的東西來取代它們:

strlen(str_replace(array("\r", "\n"), ' ', $text))) 

或本:

strlen(preg_replace('/\s+/', ' ', trim($text))) 

但是,如果我得到了如10段和jQuery返回2500個字符,php將返回2510或2490,這取決於如果我用一個空格替換新行或將它們完全刪除。所以差異是20,但只有10個新的線......?

我錯過了什麼?我怎樣才能讓PHP返回與jQuery相同的結果?問題在哪裏,在PHP或在jQuery?

+0

你使用什麼字符編碼?你的客戶在哪個操作系統上運行? (Windows使用與unix不同的行結束符)。 – Maerlyn 2012-08-14 10:38:16

+0

@Maerlyn:好吧,它會運行在一個網絡服務器上,我現在不知道它是Windows還是Linux,它只是共享主機...字符集是utf8,但這裏有關係嗎? – Chris 2012-08-14 10:39:39

+0

您可能不得不在兩個地方對換行標準化。當用戶點擊「返回」時,我認爲你不能控制默認的瀏覽器插入。 – 2012-08-14 10:39:42

回答

3

這應該工作:

strlen(str_replace("\r", '', $text))) 

說明:

strlen(str_replace(array("\r", "\n"), ' ', $text)))

在這裏,你要替換\ r和\ n上帶有一個空間,所以字符數並沒有改變。

strlen(preg_replace('/\s+/', ' ', trim($text)))

在這裏,你正在減少連續空格成一個單一的' '

+2

你可以向他解釋爲什麼'/ \ s + /'不能在這裏實現。那是'/ \ s + /'他正在崩潰的空間。我會用'preg_replace('/(?:\ r | \ n)/','',trim($ text))'來確定。 – Prusse 2012-08-14 10:43:59

+0

@Prusse是的,完成了! – Dogbert 2012-08-14 10:46:50

+0

謝謝你,Dogbert!不幸的是,它仍然給了我錯誤的結果。我輸入了12345,然後是5個空格和5個新行 - jQuery說15,php說20 ... – Chris 2012-08-14 10:49:03

相關問題