整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          將織夢網頁GBK/GB2312編碼轉為UTF-8編碼步驟方法

          、為什么MIP僅支持utf-8

          目前百度MIP對網頁編碼規定,必須要是UTF-8編碼,那么GBK或者GB2312的網頁要怎么辦呢?是否可以將GBK或者GB2312編碼轉換成UTF-8編碼呢?答案是可以的。
          那么為什么百度MIP只支持UTF-8編碼呢?因為現在手機上帶的瀏覽器只支持網頁的UTF-8編碼,GBK或者GB2312的網頁在手機上打開顯示的是亂碼,所以百度MIP官方為了手機網頁的兼容性,規定MIP網頁的編碼必須是UTF-8編碼,建議大家以后設計網頁編碼也盡量選擇UTF-8編碼,UTF-8編碼不僅是國際主流編碼,而且也會導致網頁所占空間也會減小,以下教程也適用于其它的PHP程序cms系統。
          GBK/GB2312編碼轉換為UTF-8編碼大概的步驟方法是先將網站程序替換成UTF-8編碼,再將網站模版進行轉碼,最后再進行數據庫的編碼轉換,具體步驟方法講解如下:

          2、先備份原GBK或者GB2312網站程序

          在網站編碼進行轉碼前,先將GBK(GB2312)原網站程序進行備份,步驟方法如下:
          (1)利用織夢cms程序后臺數據庫備份功能備份好網站數據庫,步驟方法為點擊系統—系統設置—數據庫備份/還原,點擊下方的“提交”按鈕,進行原程序數據庫的備份,備份時間長短根據數據庫大小來決定。


          (2)網站數據庫備份完成以后,再將網站根目錄下的所有文件進行打包下載到自己本地電腦中,防止轉碼失敗,導致網站不能正常運行,完整的織夢網站分為三個部分,一個為織夢cms官方程序,一個為網站前臺模板程序,最后一個就是網站數據庫文件,需要依次對這三個部分進行轉碼操作,網站數據庫文件轉碼可以利用帝國數據備份王進行轉碼,再將織夢UTF-8的程序替換原有的GBK或者GB2312程序,最后用網頁編輯器對網站前臺模板進行轉碼。

          3、轉碼工作拆解之數據庫轉碼

          網站數據庫轉碼,經過多次的測試,發現用帝國數據備份王進行轉碼是最為安全的,大家可以百度搜索下載“帝國數據備份王”,下載后將得到如下文件,如下圖所示:


          帝國數據備份王“upload”這個文件夾名稱可以改成其它的文件夾名稱,例如我們可以將“upload”改成“beifen”,放在網站根目錄下面,訪問帝國數據備份王,在地址欄中輸入“域名/shuju”,帳號為admin,密碼為123456,登錄成功后出現一個數據庫設置界面,將原網站的數據庫地址、用戶、密碼都輸入進去,也有可能會提示你要修改登錄密碼和隨機驗證碼,按照提示修改一下就行了,接著點擊下方的“備份數據”,你將會看到原網站程序的數據庫名稱,點擊“備份數據”出現的界面很關鍵,因為這一步將會進行網站數據庫轉碼操作。


          我們手動選擇“utf-8”編碼,將網站數據庫備份出來,這時候備份出來的數據庫編碼就是UTF-8編碼了,轉碼完成的數據庫存放目錄要記住,因為將網站數據備份完成以后,我們還需要進行還原操作的,在數據庫還在之前,我們需要先將網站程序和網站模板進行轉碼,網站程序和網站模板轉碼完成以后,再還原轉碼后的網站數據庫。

          4、轉碼工作拆解之程序轉碼

          網站程序轉碼大概步驟是,先保留好原有的GBK或者GB2312程序備份包,再將原有程序空間的程序清除干凈,網站根目錄下的“帝國數據備份王”千萬記得不要清理了,到時候恢復網站數據庫還要用到,將在織夢官網下載好的織夢UTF-8編碼程序解壓上傳到網站空間內。

          安裝步驟詳解請看《織夢cms系統MIP改造教程方法步驟》這篇文章,下面我們直接講解織夢cms模版轉碼操作。
          第1步,在本地電腦瀏覽器地址欄中輸入,你的域名/install/index.php,開始安裝織夢程序

          第2步,勾選“我已經閱讀并同意此協議”,點擊繼續,進行程序的下一步安裝。

          第3步,如果上圖中“繼續”按鈕是可點狀態,直接點“繼續”進行程序的下一步安裝,出現的紅叉就不用管了,如果“繼續”按鈕是不可點擊狀態,說明你的多站空間有問題,找空間服務商查找相關原因或者自行查找原因。

          這個步驟是最重要的一個步驟,上圖中“模版選擇”我們不需要進行任何操作,“數據庫設定”按照空間商給的信息依次輸入“數據庫主機”、“數據庫名稱”、“數據庫用戶”、“數據庫密碼”、“數據表前綴”、“數據庫編碼”,“數據表前綴”可改可不改,“數據庫編碼”默認的也不需要修改。
          “管理員帳號密碼”這塊設置你網站后臺管理的帳號和密碼,自己記著就行,Cookie加密碼一定不要動。
          “網站設置”這塊,網站名稱填入你網站的品牌名稱即可,其它的地方就不需要動了,”安裝初始化數據進行體驗“這個復選框不要勾選,最后點擊”繼續“按鈕完成程序的安裝,下圖中附上織夢cms程序安裝的參數設置,大家可以參考一下。

          如果出來以下圖示的界面,則證明你的織夢和序安裝成功了

          織夢cms程序轉碼部分這里就完成了。

          5、網頁前臺頁面模版轉碼

          這個步驟一定要使用專業網頁編輯軟件進行轉碼,例如dreamweaver或者Notepad+,也可以使用網站針對GBK(gb2312)轉碼utf-8的小工具軟件,千成記得不要用記事本進行轉碼操作。
          首先將原GBK(gb2312)網站前臺模板下載下來,一般是在templets文件夾下的default文件夾中,下面以dreamweaver網頁編輯軟件教大家如何將GBK(gb2312)模板轉成utf-8。
          用dreamweaver網頁編輯軟件打開一個前端模版文件,依次點擊軟件菜單中的修改—頁面屬性—標題/編碼—編碼,如下圖所示:

          我們將原模版文件簡體中文(GB2312)選擇成 Unicode(UTF-8),

          點擊確定,這個模板文件就成功的轉成UTF-8編碼了,重復以上方法將其它前臺模板文件全部轉成UTF-8編碼。

          6、恢復網站

          網站前臺模板文件轉碼完成以后,網站轉碼其實還并未完全完成,還有數據庫并未恢復過來,這里我們將再次使用”帝國數據備份王“來恢復網站的數據庫,步驟方法為:點擊“備份與恢復數據庫”下面的恢復數據,再選擇數據源目錄,就是剛剛備份的數據庫目錄,選擇下面的“要導入的數據庫”再選擇數據表(就是原網站數據表),點擊開始恢復。
          恢復網站數據庫后,GBK(gb2312)編碼的網站就完成被轉成utf-8編碼了,到了這一步我們就可以對網站模板進行MIP改造了。

          7、轉碼注意事項

          1)如果原GBK(gb2312)編碼的程序做過二次開發或其它的程序改動,不建議進行轉碼操作;
          2)程序轉碼完成以后,我們需要在后臺進行一步確認操作,方法步驟為系統設置-系統基本參數,最后點擊一下確定就行了;
          3)如果更新網站,有出現錯誤,在后臺點擊生成-自動任務-更新系統緩存,試試沒有解決你的問題;
          4)織夢模版標簽盡量使用兼容的模版標簽。
          織夢的轉碼操作教程也可以應用到其它的PHP程序cms系統,大家如果還有其它總理 ,歡迎下方留言評論,會及時回復大家。

          以discuz后臺提供的數據庫導出方法為例先分享一下我轉碼的過程,后面也會講另外幾種數據庫導入導出的方法。
          首先關閉站點


          站長,數據庫,備份,強制UTF8




          備份完成的數據庫文件在根目錄/data/backup_XXX里,帶時間標記





          接下來,把插件、模版、論壇附件、數據庫備份文件、會員頭像文件、以及你自己修改過的文件比如ICO等下載到本地。(只要是你自己修改過的,和discuz默認不一樣的地方都下載下來)備用!










          做好這些準備工作之后,原站先不要動,在本地搭建測試環境或者開個測試主機,全新安裝UTF8論壇程序,這里需要注意的是,最好是和GBK的程序是同一個版本的,意思就是2.5對2.5,3.0對3.0,3.2對3.2,3.3對3.3,不同版本沒有測試過,有興趣的可以測試下。
          安裝好之后,把我們剛才下載下來的那些文件,上傳到新論壇的對應目錄中,
          有需要轉碼的文件提前轉好碼,一般情況下,模版需要自行轉碼,一般情況下,插件都是都是支持4種編碼的


          如果不支持,就需要自行轉碼
          。上傳好之后,后臺恢復數據。


          恢復完之后,會發現是亂碼的,后臺把模版、插件全部卸載,然后重新安裝,再更新緩存,就OK了。不過這種恢復數據的方法并不完美,不知道是不是可以重現,后臺插件設置里面調用的版塊,是新安裝論壇的,并不顯示老論壇的版塊,但是在前臺的實際展示中,老論壇設置的版塊都生效了。

          如果數據庫無法鏈接的話,請把下面倆文件里的數據庫配置及域名配置修改好




          有點輕微強迫癥的我,不滿足于這種有瑕疵的方法,于是我又嘗試了另外幾種數據庫的導入導出方法,我簡單總結一下

          1.discuz自帶的數據庫導入導出功能,就是上面講的,瑕疵也提到了。

          2.帝國備份王,這個不詳細說了,我看社區有寫過教程的了,自行翻閱,前面關于文件的操作都一樣,不同的地方在于,全新安裝UTF8論壇之后,用帝國備份王刪除新論壇的數據庫文件,然后導入從老論壇導出的數據庫文件(當然,老數據也是用帝國備份王導出來的,這好像是一句廢話)
          需要提的一點是,我嘗試了好幾次,有幾次成功,有幾次不成功。但是成功的幾次,數據轉換都非常完美!

          3.用服務器商提供的數據導入導出功能實現數據庫的轉換,現在的主機基本上都提供這個功能的,操作流程同帝國備份王,也是先刪除新論壇的數據庫文件,然后導入,多次嘗試,有成功的,也有不成功的,成功的一次,也是非常完美。

          重點提示:上文中我提到的完美,是不包含DIY數據的,是指的基本功能,轉換完之后,我是手動修復的部分DIY數據!

          另外說一下,最后我是開了個測試主機進行的轉換,轉換過程中原站一直沒動,全部轉換好,設置好之后,先把原域名解析到了測試主機,然后對主站進行完全備份,下載到本地,(為何要備份下載到本地呢?因為時間太短來不及完全測試,日后發現哪里少了文件可以再從本地傳上去)最后全部刪除,又把測試站數據遷移到原站,弄好之后,又把域名解析回原站,這樣可以最大限度的減少對訪問會員的影響。當然,如果只擔心收錄影響的話,可以用站長平臺提供的閉站保護!

          一點小的過程分享,希望帶給想轉碼的同學一點點的幫助,祝轉碼成功,最后祝社區的朋友和管理員、版主及家人 新春喜樂,幸福安康,財源廣進,步步高升!

          幾天在處理服務器的一個問題時,發現這樣一段代碼,功能是把一個uft-8格式的xml文件轉成gbk的編碼格式。

          先說下環境,Centos7系統+C語言。原來的寫法是用調用system()函數,來執行一個類似于shell窗口的命令:

          system("iconv -c -f UTF8 -t GBK /usr/local/configs/123.xml -o /usr/local/configs/123.xml.gbk");

          這句話,是利用了Centos系統中安裝的iconv的庫,來把utf-8的格式文件,轉成gbk格式的文件。通過程序調用system()函數,本身沒問題。但是發現在系統內存不足時,system的返回值是12,查了下代表系統內存不足,從而執行失敗。system函數在被程序調用時,會fork一個子進程,會復制父進程中一些數據段,代碼段等等(再深的研究,我也不懂)。所以,就會出現系統內存剩的不多時,在調用system函數,就可能出現內存不足,導致調用失敗。


          解決方法,一個是升級內存,一個是優化整體代碼的內存使用情況。還剩一個就是不用system()函數來執行icovn的命令。這里用C語言實現了一個utf-8轉碼gbk的程序,供參考。

          #include <stdio.h>  
          #include <stdlib.h>  
          #include <string.h>  
          #include <iconv.h>  
          #include <errno.h>  
          #include <fcntl.h>  
          #include <unistd.h>  
            
          #define IN_BUFFER_SIZE (1024*100)  
          #define OUT_BUFFER_SIZE (IN_BUFFER_SIZE * 4) // 假設GBK可能需要更多空間  
            
          int main(void) {  
              FILE *input_file, *output_file;  
              char in_buffer[IN_BUFFER_SIZE];  
              char out_buffer[OUT_BUFFER_SIZE];  
              size_t in_bytes_left, out_bytes_left;  
              iconv_t cd;  
              char *input_ptr, *output_ptr;  
            
              // 打開輸入和輸出文件  
              input_file = fopen("/usr/local/configs/123.xml", "rb");  
              if (!input_file) {  
                  perror("Error opening input file");  
                  return 1;  
              }  
            
              output_file = fopen("/usr/local/configs/123.xml.gbk", "wb");  
              if (!output_file) {  
                  perror("Error opening output file");  
                  fclose(input_file);  
                  return 1;  
              }  
            
              // 初始化iconv描述符  
              cd = iconv_open("GBK", "UTF-8");  
              if (cd == (iconv_t)-1) {  
                  perror("iconv_open");  
                  fclose(input_file);  
                  fclose(output_file);  
                  return 1;  
              }  
            
              // 讀取并轉換數據  
              while ((in_bytes_left = fread(in_buffer, 1, IN_BUFFER_SIZE, input_file)) > 0) {  
                  input_ptr = in_buffer;  
                  out_bytes_left = OUT_BUFFER_SIZE;  
                  output_ptr = out_buffer;  
            
                  if (iconv(cd, &input_ptr, &in_bytes_left, &output_ptr, &out_bytes_left) == (size_t)-1) {  
                      if (errno == E2BIG) {  
                          // 輸出緩沖區太小,應該增加其大小  
                          // 但在這個例子中,我們假設緩沖區足夠大,因此這是一個錯誤情況  
                          perror("iconv: E2BIG");  
                          break;  
                      } else if (errno == EILSEQ) {  
                          // 輸入序列無效,可以跳過或替換字符  
                          // 在這里我們只是跳過它  
                          input_ptr++;  
                          in_bytes_left--;  
                      } else {  
                          perror("iconv");  
                          break;  
                      }  
                  }  
            
                  // 寫入轉換后的數據到輸出文件  
                  fwrite(out_buffer, 1, output_ptr - out_buffer, output_file);  
              }  
            
              // 清理并關閉文件  
              iconv_close(cd);  
              fclose(input_file);  
              fclose(output_file);  
            
              return 0;  
          }
          

          編譯:gcc直接編譯即可

          直接使用函數處理utf-8轉gbk的方法,這里面還是用了iconv的庫函數。


          主站蜘蛛池模板: 一区二区三区精品高清视频免费在线播放 | 成人区精品一区二区不卡| 中日韩精品无码一区二区三区| 91精品一区二区综合在线| 精品亚洲av无码一区二区柚蜜| 狠狠爱无码一区二区三区| 国产亚洲福利精品一区| 免费精品一区二区三区在线观看| 亚洲av无码一区二区三区乱子伦| jizz免费一区二区三区| 亚洲熟妇av一区| 成人影片一区免费观看| 风流老熟女一区二区三区| 亚洲宅男精品一区在线观看| 色妞AV永久一区二区国产AV| 免费一区二区无码视频在线播放| 精品永久久福利一区二区| 三上悠亚一区二区观看| 日本一区午夜爱爱| 国产肥熟女视频一区二区三区| 亚洲午夜在线一区| 人妻AV中文字幕一区二区三区| 日韩精品无码视频一区二区蜜桃| 日本高清无卡码一区二区久久 | 在线精品动漫一区二区无广告| 日本免费一区尤物| 最新中文字幕一区二区乱码 | 亚洲午夜精品一区二区| 中文字幕VA一区二区三区| 精品3d动漫视频一区在线观看| 国产精品一区二区毛卡片| 51视频国产精品一区二区| 91精品国产一区| 日韩精品中文字幕无码一区 | 末成年女AV片一区二区| 国产AV午夜精品一区二区三区| 国模大尺度视频一区二区| 高清国产精品人妻一区二区| 日韩电影一区二区| 99精品国产高清一区二区| 亚洲综合一区二区|