歡迎光臨, 訪客. 請先 登入註冊一個帳號.
四月 27, 2024, 09:51:51 下午
19595 文章 在 3865 主題 由 4580 會員
最新註冊會員: aa123aa1
LifeType 中文開發論壇  |  開發  |  中文相關  |  有關 big5 化後許蓋功的亂碼原因部份詳解 - 請各位學長多多指點 « 上篇主題 下篇主題 »
頁: [1]
作者 主題: 有關 big5 化後許蓋功的亂碼原因部份詳解 - 請各位學長多多指點  (閱讀 12441 次)
FIEND
新手見習
*
文章: 40



檢視個人資料 個人網站
« 於: 十月 26, 2005, 03:39:33 上午 »

小弟還在實驗可不可行難度多高  :

因為小弟想做一個新的個人網站 覺得非用 big5 版來做才行 所以才會異想天開的想要big5 化

目前並沒有大動土木的計劃想先收集各位學長的意見 望比較早玩 plog 的學長們指導在下 :

小弟的思路及想法上是否可行 ...

1. 小弟打算以 big5 為底層 放入 databases 整個網以 big5 編碼 吐出來 .

2.  修正所有 方土土 及 許功蓋的亂碼問題 .

3.  以 utf-8 的方式吐出 rss 讓 big5 版本的 rss 也可以交換連結 .

經過 研究 可以發現  :

以 magic_quotes_gpc 為 on 的情況 之下 許蓋功問題會有亂碼的情況 ...

以後台 修改文章為例 小弟先提出 許蓋功的問題 .....

big5 化産生 bug 的産生原因  :

vim class/action/admin/adminpostmanagementcommonaction.class.php

可以發現 :

以 這句為例 -

引用
$this->_postText     = trim(Textfilter::xhtmlize($this->_request->getValue( "postText" )));

第一個 method ->  getValue() : 這個 method 可以在

vim class/net/request.class.php 找到 內容為 :

引用
                function getValue( $key, $defaultValue = null )
                {
                        // get the value from the parent
                        $value = parent::getValue( $key, $defaultValue );

                        // now if magic quotes are enabled and the input parameter is not an array
                        // and the feature has not been disabled, then strip the slashes
                        // fiend
                        if( get_magic_quotes_gpc() && !is_array( $value ) && $this->_stripSlashes ) {
                                $value = stripslashes( $value ); //  post 字串 第一次 做 stripslashes
                        }

                        return( $value );
                }

所以它會先判斷 你的 伺服器環境 決定是否要先 消除一次  脱溢字元

而第二次發生在 :

參考 vim ./class/data/textfilter.class.php   的 :

引用
                function xhtmlize( $string )
                {
                      // use kses in the "xhtml converter" mode
                      $config =& Config::getConfig();
                      if( $config->getValue( "xhtml_converter_enabled" )) {
                          $kses = new kses( true, $config->getValue( "xhtml_converter_aggresive_mode_enabled"));   
                          $result = $kses->Parse( $string );

                          // if balanceTags wasn't broken, we could use it...
                          //$result = Textfilter::balanceTags( $result );
                      }
                      else
                          $result = $string;

                      return $result;
                }

由 它 宣告的 kses 實體可以追到 :

vim class/data/kses.class.php <-- 還好命名很有規則 查起來快多了 .. ^^

引用
                function Parse($string = "")
                {

                        // 看到沒 它就是兇手 重覆 判斷 伺服器設定 是否 有自動脱溢 超全域陣列變數 然後再執行 stripslashes 而造成 寫入資料庫前就變成亂碼
                        if (get_magic_quotes_gpc())
                        {
                                $string = stripslashes($string);  // 第二次 過濾 脱溢字元
                        }
                        $string = $this->_no_null($string);
                        $string = $this->_js_entities($string);
                        $string = $this->_normalize_entities($string);
                        $string = $this->_hook($string);
                        $string = $this->_split($string);

                        if( $this->xhtmlConverterOnly ) {
                   // and also xhtmlize a few more tags...
                   $string = str_replace( "<br>", "<br />", $string );
                   $string = str_replace( "<hr>", "<hr />", $string );
                         }
                        return $string;
                }


所以造成寫入時的big5 字元亂碼 ....



###############################################################################3

目前小弟還在實驗 big5 化會不會有什麼大問題可不可行 還有望各位學長多多指點

先提出個人 測試後的結果 .... 近期會多發表一些有關 big5 化的一些發現

« 最後編輯時間: 十月 26, 2005, 04:07:13 上午 由 FIEND » 已記錄

我也來玩玩 blog 吧 ^^ 請大家多多指教

我就是不愛用 utf-8 的系統 -- plog big5 版本 漠漠進行中......

(十月九號要去日本玩啦 - 有事情找我的等我回國)

http://www.twbb.org
FIEND
新手見習
*
文章: 40



檢視個人資料 個人網站
« 回覆文章 #1 於: 十月 26, 2005, 04:01:56 上午 »

針對這個問題 小弟提出個人小小的看法

1. 我們 需清查  get_magic_quotes_gpc on 的情況下

會做幾次addslashes 什麼情況會做 有那些流程造成重覆做的 要 列出 清單 再加以修正

這個方式極為麻煩....

2. 這個 big5 會造成的 bug - 官方當初會這樣寫是沒有考慮big5 的問題 但這樣寫可能有它的用意

但是也造成 big5 化後 的 bug 只是小弟還不熟這套系統需要多研究看看 .

但是依小弟的看法  get_magic_quotes_gpc 這個判斷 其實可以 放在寫入資料庫時字串再去做判斷

如果 get_magic_quotes_gpc 為 off 時 則 進 db 前 都會執行  mysql_escape_string 來阻絕 injection 攻擊

反之 不加  這樣改起來速度會快點 但有可能 違反官方當初這樣做的用意

若 各位學長在這段有 經驗者 望指點在下

小弟 閱讀程式不算慢 但是要全部看完 也還真有點累 ^^!! 

« 最後編輯時間: 十月 26, 2005, 04:13:50 上午 由 FIEND » 已記錄

我也來玩玩 blog 吧 ^^ 請大家多多指教

我就是不愛用 utf-8 的系統 -- plog big5 版本 漠漠進行中......

(十月九號要去日本玩啦 - 有事情找我的等我回國)

http://www.twbb.org
FIEND
新手見習
*
文章: 40



檢視個人資料 個人網站
« 回覆文章 #2 於: 十月 26, 2005, 06:54:36 上午 »


另外再提出一個方案 :

1. 以 utf-8 為底層 放入 databases 但是前台整個網以 big5 編碼 吐出來 . 後台維持使用 utf-8

2.  以 utf-8 的方式吐出 rss  .

也就是乾脆做一個 可以吐 big5 或 gb2312 的 前台其它都用 utf-8

不過好像 這樣就沒什麼挑戰性了  .

只要 解決 utf-8 --> big5 方土土的問題就差不多了 ~~~~

這是最終的方案啦 小弟還是堅持 用 big5 當底層  真的沒法子解 再說 ....


已記錄

我也來玩玩 blog 吧 ^^ 請大家多多指教

我就是不愛用 utf-8 的系統 -- plog big5 版本 漠漠進行中......

(十月九號要去日本玩啦 - 有事情找我的等我回國)

http://www.twbb.org
頁: [1]
LifeType 中文開發論壇  |  開發  |  中文相關  |  有關 big5 化後許蓋功的亂碼原因部份詳解 - 請各位學長多多指點 « 上篇主題 下篇主題 »
    前往: