小弟的方法是去修改了 BlogNameValidator 這個類別
將其validate方法中的
return(( Textfilter::domainize( Textfilter::filterAllHTML( $value ))) != "" );
修改為
return(( Textfilter::filterAllHTML( $value )) != "" );
也就是不作domainize的字串過濾動作
因為在domainize方法(也就是urlize($string, true)這個方法)中的註解提到
* Given a string, convert it into something that can be used in a URL (it probably doesn't work very
* well with non iso-8859-X strings) It will remove the following characters:
*
* ; / ? : @ & = + $ ,
*
* It will convert accented characters such as �, �, �, etc to their non-accented counterparts (a, e, i) And
* any other non-alphanumeric character that hasn't been removed or replaced will be thrown away.
*
說明了此方法為了是要讓部落格名稱可以放在URL中使用,且使用此方法將對非iso-8859-X語系的字串產生影響
因此,考慮了自己的現況(1.以後如果要用簡短網址應該不可能讓中文的部落格名稱放在URL上面、2.使用utf-8中文語系,也就是非iso-8859-X語系 :-(啦)
所以就做了上述的修改
另外,在註冊時發生部落格名稱會產生亂碼的現象,小弟發現在註冊時,部落格的名稱會經過兩次文字過濾,第一個為HtmlFilter方法過濾、第二個為BlogNameValidator過濾,其中第二個過濾所產生的問題剛剛已經解決了,現在要來解決第一個問題。
在解決第一個問題之前,小弟發現在管理介面中,由管理者新增部落格、修改部落格時,在對部落格名稱文字過濾時,僅做了filterAllHTML方法過濾與BlogNameValidator方法過濾,因此,小弟就投機取巧的依樣畫葫蘆將這個問題改用filterAllHTML方法來作文字過濾,如此,就沒有新註冊時會產生部落格名稱的亂碼問題了。(不過,都說了是投機取巧,不曉得原本使用HtmlFilter方法的用意為何,小弟也沒有認真的去理解HtmlFilter方法用意為何了
)
新註冊產生亂碼的解決方法為下:
將doBlogRegistration類別,27行,作註解
$this->_request->registerFilter( "blogName", new HtmlFilter( true ));
再來同樣將這個類別的,88行
原始為
SessionManager::setSessionValue( "blogName", $this->_request->getValue( "blogName" ));
修改為
SessionManager::setSessionValue( "blogName", Textfilter::filterAllHTML($this->_request->getValue( "blogName" )));
這樣就可以啦(前提你的BlogNameValidator類別需要先作修改才行)
以上是小弟的解決方法,不知是否會產生安全上的問題,還請各位多指教
ps.我的為1.2.3版本