需求:去掉答案中的多餘空格,只保留一個半角空格。
$answer = preg_replace("/\s(?=\s)/","\\1",$answer);
$answer = trim($answer);
自測都是沒問題的。但是和端聯調的時候出現了一個奇怪的問題。看起來都是空格,但是卻怎麼也去不掉。
想來想去,打一下字符的ANSCII碼吧。於是出現了以下情況。發現160和32都是空格,但是ANSCII碼卻不同。
在PHP中trim可以去除字符串兩邊的空格和製表符等。但是trim卻去不掉這個字符。
原來:ASCII碼中有兩種特殊空格,雖然顯示一樣,但對應的的ASCII 碼值不一樣(一個碼值32,一個碼值160)
ASCII值是32:是用鍵盤輸入的空格,
ASCII值是160:不間斷空格(non-breaking space,縮寫nbsp),即 所產生的空格,作用是在頁面換行時不被打斷。
比如:
輸入hello world。但是world在此處必須要換行,但是又不希望提交上來是中間帶有換行的字符串,所以有了不間斷空格。
不間斷空格有個特點:無法被trim()所裁剪,也無法被正則表達式的\s所匹配。
所以,我用的兩種匹配都GG。
方法:
單獨去除不間斷空格,注意不能單獨去除,否則可能會去除無關字符
str_replace(chr(194).chr(160), '', $str);