0
Plack::Request
with
Encoding
Hachioji.pm
@moznion
@moznion
大学院生
!

アルバイター
!

Hachioji.pm 所属
Plack::Requestと
文字列の
エンコーディングの話
Plack::Request
皆さん使ってますか
Plack::Request
おさらい
教典こと
miyagawaさんの
Plack Handbook
から引用
Plack::Requestは, PSGI環境変数や
レスポンス配列に対して, 簡単な
オブジェクト指向APIを提供します.
Plack Handbook 14章より引用
新しいミドルウェアを記述する際の
ライブラリとしても利用できますし,
PlackをベースにしたWebフレームワー
クを記述する際のリクエスト/レスポ
ンスのベースクラスとしても使えます.
Plack Handbook 14章より引用
WAF作る時とか
Webアプリケーション
作る時とかに使う
(大体はparentとして)
例 (あくまで例)
さてコレ
param()やparameters()など
を使うと, GETやPOSTの
パラメータを取れる
param()やparameters()など
を使うと, GETやPOSTの
パラメータを取れる
ただしバイト列で
つまり?
予期しない
エンコーディングの
文字列が来ると
文字化けを起こす
予期しない
エンコーディングの
文字列が来ると
文字化けを起こす
予期しない
エンコーディングの
文字列が来ると
文字化けを起こす
予期しない
エンコーディングの
文字列が来ると
文字化けを起こす
適切に decodeを施して
Perl-Stringにしてやる
必要が有る
(Plack::Requestは)
WAF作る時とか
Webアプリケーション
作る時とかに使う
(大体はparentとして)
(Plack::Requestは)
WAF作る時とか
Webアプリケーション
作る時とかに使う
(大体はparentとして)
decode処理を
みんないちいち
書いてる
職人が!
心をこめて!
書いている
めっちゃ再発明されてる
(大体コピペ[要出典]で)
もう嫌
もう嫌
という訳で
そこら辺にケリを
付けるべく作ったのが
Plack::Request::WithEncoding
https://metacpan.org/pod/Plack::Request::WithEncoding
https://github.com/moznion/Plack-Reques...
これを使うと,
param()やparameters()が
decode済み文字列を
返してくれるので便利!
例
例

エンコーディングを指定
例

decodedな文字列が得られる
職人の仕事を
肩代わり!
フレームワークを使わなくても
Plack::Request::WithEncodingと
Plack::Requestの組み合わせで
カジュアルにアプリが書ける!
と偉そうに言ったものの
中身はほぼAmon2からの
パク^H^Hインスパイア
パッチやご意見
お待ちしています
で,
Plack::Middlewareで, リクエストの
エンコーディングの判別をして
$env->{‘plack.request.withencoding.encoding'}に
格納しておくみたいなことをすることにより
よしなに文字列をdeco...
アーハン?
という訳で実装
Plack::Middleware::
AutoDetectEncoding
https://github.com/moznion/Plack-Middleware-AutoDetectEncoding
Rails3で言うところの
snowmanに近い実装
☃
☃

Him!
☃のような
特定の文字コードでしか
使われない文字を使って
文字コードを特定
ただ今回のケースでは
☃が使えないので
(↑Unicodeの為)
別の文字で代替
formタグ内に
<input type="hidden"
name=“__plack_middleware_auto_detect_encoding”
value="駱駝" />

のようなinput要素を追加
フォームデータと共に
判別用文...
リクエストとして来た
URLエンコード済み
判別用文字を
各エンコーディングと比較
エンコーディングを
特定したら
$env->{‘plack.request.withencoding.encoding’}

にそれを格納する
こんな感じ
ただ,
これで良いのか感
なんか微妙なので
GitHub止まりです
斬新なdescription!
なにか良いアイデア
ございましたら
教えてください
あと思いつきで
vim-plackというvim plug-in
を書きましたが
あまり便利になりませんでした
おわり
Plack::Request with Encoding
Plack::Request with Encoding
Plack::Request with Encoding
Upcoming SlideShare
Loading in...5
×

Plack::Request with Encoding

547

Published on

2013-11-20, shibuya.pl (plackcon)

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
547
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Plack::Request with Encoding"

  1. 1. Plack::Request with Encoding Hachioji.pm @moznion
  2. 2. @moznion 大学院生 ! アルバイター ! Hachioji.pm 所属
  3. 3. Plack::Requestと 文字列の エンコーディングの話
  4. 4. Plack::Request
  5. 5. 皆さん使ってますか
  6. 6. Plack::Request おさらい
  7. 7. 教典こと miyagawaさんの Plack Handbook から引用
  8. 8. Plack::Requestは, PSGI環境変数や レスポンス配列に対して, 簡単な オブジェクト指向APIを提供します. Plack Handbook 14章より引用
  9. 9. 新しいミドルウェアを記述する際の ライブラリとしても利用できますし, PlackをベースにしたWebフレームワー クを記述する際のリクエスト/レスポ ンスのベースクラスとしても使えます. Plack Handbook 14章より引用
  10. 10. WAF作る時とか Webアプリケーション 作る時とかに使う (大体はparentとして)
  11. 11. 例 (あくまで例)
  12. 12. さてコレ
  13. 13. param()やparameters()など を使うと, GETやPOSTの パラメータを取れる
  14. 14. param()やparameters()など を使うと, GETやPOSTの パラメータを取れる ただしバイト列で
  15. 15. つまり?
  16. 16. 予期しない エンコーディングの 文字列が来ると 文字化けを起こす
  17. 17. 予期しない エンコーディングの 文字列が来ると 文字化けを起こす
  18. 18. 予期しない エンコーディングの 文字列が来ると 文字化けを起こす
  19. 19. 予期しない エンコーディングの 文字列が来ると 文字化けを起こす
  20. 20. 適切に decodeを施して Perl-Stringにしてやる 必要が有る
  21. 21. (Plack::Requestは) WAF作る時とか Webアプリケーション 作る時とかに使う (大体はparentとして)
  22. 22. (Plack::Requestは) WAF作る時とか Webアプリケーション 作る時とかに使う (大体はparentとして)
  23. 23. decode処理を みんないちいち 書いてる
  24. 24. 職人が! 心をこめて! 書いている
  25. 25. めっちゃ再発明されてる (大体コピペ[要出典]で)
  26. 26. もう嫌
  27. 27. もう嫌
  28. 28. という訳で そこら辺にケリを 付けるべく作ったのが
  29. 29. Plack::Request::WithEncoding https://metacpan.org/pod/Plack::Request::WithEncoding https://github.com/moznion/Plack-Request-WithEncoding
  30. 30. これを使うと, param()やparameters()が decode済み文字列を 返してくれるので便利!
  31. 31.
  32. 32. 例 エンコーディングを指定
  33. 33. 例 decodedな文字列が得られる
  34. 34. 職人の仕事を 肩代わり!
  35. 35. フレームワークを使わなくても Plack::Request::WithEncodingと Plack::Requestの組み合わせで カジュアルにアプリが書ける!
  36. 36. と偉そうに言ったものの 中身はほぼAmon2からの パク^H^Hインスパイア
  37. 37. パッチやご意見 お待ちしています
  38. 38. で,
  39. 39. Plack::Middlewareで, リクエストの エンコーディングの判別をして $env->{‘plack.request.withencoding.encoding'}に 格納しておくみたいなことをすることにより よしなに文字列をdecodeしたりすることが 出来るようになります. Plack Handbook Plack::Request::WithEncodingがなぜ便利なのか http://www.songmu.jp/riji/entry/2013-10-01-plack-request-with-encoding.html
  40. 40. アーハン?
  41. 41. という訳で実装
  42. 42. Plack::Middleware:: AutoDetectEncoding https://github.com/moznion/Plack-Middleware-AutoDetectEncoding
  43. 43. Rails3で言うところの snowmanに近い実装
  44. 44.
  45. 45. ☃ Him!
  46. 46. ☃のような 特定の文字コードでしか 使われない文字を使って 文字コードを特定
  47. 47. ただ今回のケースでは ☃が使えないので (↑Unicodeの為) 別の文字で代替
  48. 48. formタグ内に <input type="hidden" name=“__plack_middleware_auto_detect_encoding” value="駱駝" /> のようなinput要素を追加 フォームデータと共に 判別用文字を送ってもらう
  49. 49. リクエストとして来た URLエンコード済み 判別用文字を 各エンコーディングと比較
  50. 50. エンコーディングを 特定したら $env->{‘plack.request.withencoding.encoding’} にそれを格納する
  51. 51. こんな感じ
  52. 52. ただ, これで良いのか感
  53. 53. なんか微妙なので GitHub止まりです
  54. 54. 斬新なdescription!
  55. 55. なにか良いアイデア ございましたら 教えてください
  56. 56. あと思いつきで vim-plackというvim plug-in を書きましたが あまり便利になりませんでした
  57. 57. おわり
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×