Closed ichigotake closed 11 years ago
お酒が入ってる時の勢いで出したレポートなので不手際があると思います お酒が抜け切った頃にまたレポートします…
そろそろ抜けきったでしょうか?
今日の仕事が終わって家に着いたらもう一度詳しく調べてみます
追加で試した事
検証ブランチ: https://github.com/ichigotake/Amon/compare/master...encode_test
結論から言うと、原因はわからず事象を確認するだけしか出来ませんでした
タイトルで示したように tmpl/index.tt に検証コードを書き加えたものをSetupスクリプトに含ませ、手元にインストールする
Setupに含めた デバッグプリント( _warn $c->req->uriwith({page => 1}) )を見ると、正しいエンコードになっていた => 原因はテンプレートでの何か?
http://localhost:5000/?page=1&q=%E3%81%82 at /path/to/MyApp/lib/MyApp/Web/Dispatcher.pm line 12.
以下のいずれかを実行してから carton exec plackup するとエンコードが正しくなり、そのアプリケーションでは 二度と バグが再現しなくなる
$ touch .
$ touch app.psgi
$ touch local
$ touch lib
$ cp /other/path/app.psgi app.psgi # 中身が全く同じもので上書き
### *touch* に限らず、*vim* でファイルを開いて何も編集せずに上書き保存をするだけでも同等の効果が得られる
$ carton exec plackup #再起動してもエンコードが正しくなる
### tmpl/ は何かしらの操作を加えても影響なし
まとめ
ものは試しと、Amon2::Web::Requestに use utf8 を書き加えてみましたが、変わらず。 (flagged utf8についてよくわかっていないのでこれは当てずっぽうな検証ですが…)
ちょっとためすのむずかしくてお返事がおそくなりましてすみません。 こちら調査の結果、Xslate のバグであると断定し、@gfx に報告いたしました。 https://github.com/xslate/p5-Text-Xslate/issues/82
ですので、そのうちなおるかとおもいます。
はい、ありがとうございます
Xslate 2.0008で修正しました‥が、この問題が自然消滅する方向での修正ではないかもしれません。
具体的には、テンプレート文字列内の文字列リテラルはすべて Text::Xslate->new(input_layer => '":encoding(utf8)")
の影響下ではUTF8フラグが付くようになりました。これがもともと初回起動時や cache => 0
時の挙動でしたので。
だいぶおそくなってしまいましたが、修正しました。
すっかり忘れてしまっていました 修正ありがとうございます
uri_with()でURIエンコードがうまくいかないケースがある
原因はよくわかりませんでした