在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    中文字符串截取造成的亂碼處理

    近日接手一個(gè)二開添加翻譯插件的任務(wù),加翻譯插件前網(wǎng)頁(yè)顯示正常,加插件后部分網(wǎng)頁(yè)前部顯示正常,后部顯示亂碼,看起來(lái)與文本編碼不正確差不多。一開始感覺有些無(wú)從下手,仔細(xì)瀏覽網(wǎng)頁(yè)后發(fā)現(xiàn),每次出現(xiàn)亂碼前都有個(gè)不完整的文字,懷疑是文字截取錯(cuò)誤造成了亂碼。

    打開源碼,發(fā)現(xiàn)原代碼中使用了substr函數(shù)來(lái)截取字符串。在php中,substr函數(shù)是嚴(yán)格按字節(jié)數(shù)來(lái)截取字符串,雖然一個(gè)中文字符為3個(gè)字節(jié),如果僅以3的倍數(shù)來(lái)進(jìn)行截取,字符串中一旦出現(xiàn)字母、數(shù)字等單字節(jié)字符而沒(méi)有在截取前進(jìn)行判斷處理,就很容易造成出現(xiàn)截取到半個(gè)中文字符的情況。

    例如如下代碼,

    $str=”活潑楓葉6c的頭條號(hào)”;echo substr($str,0,15);

    運(yùn)行的結(jié)果為

    活潑楓葉6c

    雖然截取的15個(gè)字符,因?yàn)?c兩個(gè)字符只占2個(gè)字節(jié),打亂了字符串的規(guī)律,所以結(jié)果會(huì)出現(xiàn)半個(gè)字符。

    說(shuō)到這里,可能有些小伙伴會(huì)想在截取前先對(duì)字符串進(jìn)行一下處理,或者自己寫一個(gè)函數(shù)。其實(shí)大可不必這么麻煩,php已經(jīng)為我們提供了解決方案。

    1、按字符數(shù)量截取字符串的mb_substr

    例如

    $str=”活潑楓葉6c的頭條號(hào)”;echo mb_substr($str,0,7);

    運(yùn)行的結(jié)果為

    活潑楓葉6c的

    需要截取幾個(gè)字,參數(shù)就寫幾個(gè)字,一目了然。

    2、按字節(jié)截取字符串的mb_strcut

    例如

    $str=”活潑楓葉6c的頭條號(hào)”;echo mb_strcut($str,0,15);

    運(yùn)行結(jié)果為

    活潑楓葉6c

    可以看到,雖然mb_strcut也是按字節(jié)截取字符串,但它不會(huì)截?cái)嘧址?/p>

    在PHP中,substr雖然用得很多,但要對(duì)中文字符串進(jìn)行截取時(shí),應(yīng)根據(jù)需要選擇mb_substr或mb_strcut,從而避免出現(xiàn)半個(gè)字符亂碼的情況。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年7月27日 15:16
    下一篇 2022年7月27日 15:16

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息