リポジトリブラウザで全角ファイルパス(Ver0.9.2-ja)
リポジトリに全角のフォルダ名があると、そのフォルダをリポジトリブラウザで開いたときに文字化けする。
URLにエンコードされた文字がある場合に、 Python(Apache?)がPATH_INFOを正しくない方法で勝手にデコードしてしまうようだ。 Tracのcore.pyを改造し、PATH_INFOでなくREQUEST_URIから取得する。
URLの中の/browser/という文字があるかどうかを判別し、それ以降をpath_infoとして扱います。なので、サーバ名や親のフォルダに/broser/なんてのがあるとたぶん正しく動きません。
○:http://localhost/cgi-bin/trac.cgi/browser/
×:http://localhost/browser/trac.cgi/browser/
URLにエンコードされた文字がある場合に、 Python(Apache?)がPATH_INFOを正しくない方法で勝手にデコードしてしまうようだ。 Tracのcore.pyを改造し、PATH_INFOでなくREQUEST_URIから取得する。
対象バージョン(これ以上なら、たぶん大丈夫)
ServerOS | Windows2000Pro | インストール済み前提 |
Subversion | 1.2.0 | インストール済み前提 |
Apache | 2.0.54 | インストール済み前提 |
Trac | 0.9.2-ja | インストール済み前提 |
Python | 2.3.5 | インストール済み前提 |
パスなどについて
以下の仮定で書いてます。適宜読み替えてください。Python2.3インストールフォルダ | C:\Python23 |
1.core.pyを編集
c:\Python23\Lib\site-packages\trac\web\cgi_frontend.pyyをテキストエディタで編集以下の行を探し、変更する。self.path_info = self.__environ.get('PATH_INFO', '')↓
#self.path_info = self.__environ.get('PATH_INFO', '') self.path_info = urllib.unquote(self.__environ.get('REQUEST_URI','')) #p = re.compile('/[^/]+/[^/]+(/[^?]+)') p = re.compile('.+(/browser/[^?]+)') if p.match(self.path_info) == None : self.path_info = self.__environ.get('PATH_INFO', '') else: self.path_info = p.match(self.path_info).group(1)なお、この改造は
URLの中の/browser/という文字があるかどうかを判別し、それ以降をpath_infoとして扱います。なので、サーバ名や親のフォルダに/broser/なんてのがあるとたぶん正しく動きません。
○:http://localhost/cgi-bin/trac.cgi/browser/
×:http://localhost/browser/trac.cgi/browser/
2005年12月11日(日) 02:12:52 Modified by weekbuild