PHP ckeditor對中文進行處理出現問號(??)的處理方案
阿新 • • 發佈:2019-02-07
今天在專案中遇到這樣一個需求,評論資訊內容很多,在後臺評論列表展示時:如果字數小於50時,全部顯示。否則,顯示前50個字元+省略號。
本以為是很簡單的需求,於是乎就利用substr進行計算,寫了如下程式碼,很快就完成了。
/** * 擷取字串 * @param $content * @return string */ static public function getContent($content){ $content=strip_tags($content); $contentLen=strlen($content); if($contentLen>100){ $content=substr($content,0,100,'utf-8'); $contentStr=$content.'...'; }else{ $contentStr=$content; } return $contentStr; }
測試時,由於評論全是英文,並沒有發現問題。經過多次測試,發現當評論有中文時,會出現??。
當時以為是編輯器的bug,經過多方檢查。發現php有個mb_substr()函式,這時可以用mb_substr()/mb_strcut這個函式,mb_substr() /mb_strcut的用法與substr()相似,只是在mb_substr()/mb_strcut最後要加入多一個引數,以設定字串的編碼,但是 一般的伺服器都沒開啟php_mbstring.dll,需要在php.ini中把php_mbstring.dll開啟。
明白了mb_substr()使用後,就寫了一個工具方法,完美解決了此問題。具體程式碼如下:
/** * 擷取字串 * @param $content * @return string */ static public function getContent($content){ $content=strip_tags($content); $contentLen=mb_strlen($content); if($contentLen>100){ $content=mb_substr($content,0,100,'utf-8'); $contentStr=$content.'...'; }else{ $contentStr=$content; } return $contentStr; }
以上屬於個人見解,如有不正確之處,歡迎指正。