<form id="jzrjp"></form>
      <address id="jzrjp"></address><noframes id="jzrjp">

      <sub id="jzrjp"><listing id="jzrjp"><menuitem id="jzrjp"></menuitem></listing></sub><sub id="jzrjp"><address id="jzrjp"><listing id="jzrjp"></listing></address></sub>

      解決php截取帶有中文字符串出現亂碼的方法

      發布時間:2014-10-09 14:46:06     來源:     閱讀:

      文章導讀

      php是目前比較流行的服務器腳本語言,被許多網站所采用,每種語言都離不開對字符串的截取操作,php也不例外,但是在php截取中文字符串的時
      php是目前比較流行的服務器腳本語言,被許多網站所采用,每種語言都離不開對字符串的截取操作,php也不例外,但是在php截取中文字符串的時候會出現亂碼等意外情況,合肥網絡公司權威笑緣信息技術有限公司編寫了一個截取字符串的函數,在此和大家分享。
      php的字符串截取用的是substr()函數,這個函數顯然是針對英文字符以單字節運算做的處理,而漢字編碼通常是雙字節(GB2312)或三字節(UTF-8),合肥網站建設公司笑緣信息技術就來和大家分享一下漢字截取的常用方法
       
      有人說自己編寫函數執行效率可能差一點,如果不是編寫大型項目,合肥網站建設權威笑緣信息技術有限公司推薦自己編寫函數。如果你只是給客戶建個網站,業務流程本來就不大,沒必要搞得太復雜,如果做大型項目,客戶一般都有自己的服務器或者至少會租用VPS、云服務器或者主機托管等等。在考慮自己可以操作服務器,并可隨意安裝拓展組件的情況下,你可以想怎么折騰就怎么折騰,但是對于最大限度兼容的情況而言,比如一般用虛擬主機的客戶來說,他的網站業務流程顯然是有限的,用方法2自己編寫函數足夠了。
       
      使用虛擬主機和追求最大兼容性的朋友推薦用這個方法,不依賴擴展庫,函數靈活。
      (你可能會問我為什么把函數名字命名為mid?因為我以前是玩VB的,而php的substr()函數在功能上和VB的mid()函數式相似的)

      <?php
      /**
       * 從字符串指定位置截取指定個數字符(支持中文、英文、數字和混合字符串)
       * $str 必需,要截取的字符串
       * $start 可選,指定開始截取的位置,0表示第一個字符的位置,默認為0
       * $cutlength 可選,指定截取多少個字符串,若為0,則從$start處開始截取到字符串結尾,默認為0.
       * 注意:本函數中參數$start、$cutlength 以字符個數為計數單位,不以字節為計數單位。
       * 作者:合肥笑緣信息技術有限公司
       * 作者主頁:http://www.exaltemps.com
       * 阿甘   QQ:2256101452
       * 你可以隨意轉載、使用、修改這個函數,但請保留原作者版權信息,謝謝!
       */
      function mid($str,$start=0,$cutlength=0){
         $len=strlen($str); //記錄原始字符串總長度
         $litcount=0;    //字符計數
         $tmpi=0;        //記錄字節
         for ($i=0; $i<$len; $i++){
            ++$tmpi;
            if(ord(substr($str,$i,1))>127){
               ++$litcount;
               $i+=2;
               $tmpi+=2; //UTF-8的漢字字節碼是一個漢字3個字節(不是2個字節),如果判斷此處為漢字,直接跳到下一個字符的起始字節碼
            }else{
               ++$litcount;
       
            }
            if ($litcount == $start || !$start){
               break;
            }
         }
         $cutcount=0; //計算字符字節
         $litcount=0; //歸零
         if (!$start) $tmpi=0;
         for ($k=$tmpi; $k<$len; $k++){
            ++$cutcount;
            if(ord(substr($str,$k,1))>127){
               ++$litcount;
               $k+=2;
               $cutcount+=2;
            }else{
               ++$litcount;
            }
            if ($litcount == $cutlength){
               break;
            }
         }
         return substr($str,$tmpi,$cutcount);
      }
      echo mid("我有1個小毛驢",0)."<br>";    //輸出"我有1個小毛驢"
      echo mid("我有1個小毛驢",0,0)."<br>";  //輸出"我有1個小毛驢"
      echo mid("我有1個小毛驢",0,1)."<br>";  //輸出"我"
      echo mid("我有1個小毛驢",0,2)."<br>";  //輸出"我有"
      echo mid("我有1個小毛驢",0,3)."<br>";  //輸出"我有1"
      echo mid("我有1個小毛驢",0,4)."<br>";  //輸出"我有1個"
      echo mid("我有1個小毛驢",0,5)."<br>";  //輸出"我有1個小"
      echo mid("我有1個小毛驢",0,6)."<br>";  //輸出"我有1個小毛"
      echo mid("我有1個小毛驢",0,7)."<br>";  //輸出"我有1個小毛驢"
      ?>


      至此,php截取中英文字符串的的做法就完成了,合肥網站建設權威笑緣信息技術有限公司阿甘,歡迎交流
       
      文章來源:合肥笑緣信息技術有限公司http://www.exaltemps.com,轉載請注明出處并保留鏈接。
      • 電話咨詢

      • 400-670-1990
      • 18805695870
      一区二区三区鲁丝不卡

        <form id="jzrjp"></form>
          <address id="jzrjp"></address><noframes id="jzrjp">

          <sub id="jzrjp"><listing id="jzrjp"><menuitem id="jzrjp"></menuitem></listing></sub><sub id="jzrjp"><address id="jzrjp"><listing id="jzrjp"></listing></address></sub>