Bug #475

cgi.rbにNKFに依存したコードが入っている

Added by Takeyuki FUJIOKA almost 7 years ago. Updated over 4 years ago.

[ruby-dev:35922]
Status:Closed
Priority:Normal
Assignee:-
ruby -v: Backport:

Description

=begin
m17nが入ってNKFとかはもう使われないはずなのと、
日本語だけ自動的にheaderのlanguageにjaを入れるというのも
おかしな話だと思うので1.9からは削除した方がいいと思います。

Index: lib/cgi.rb
===================================================================
--- lib/cgi.rb (リビジョン 18779)
+++ lib/cgi.rb (作業コピー)
@@ -715,21 +715,6 @@
options = { "type" => options } if options.kind_of?(String)
content = yield

  • if options.has_key?("charset")
  • require "nkf"
  • case options["charset"]
  • when /iso-2022-jp/ni
  • content = NKF::nkf('-j -m0 -x', content)
  • options["language"] = "ja" unless options.has_key?("language")
  • when /euc-jp/ni
  • content = NKF::nkf('-e -m0 -x', content)
  • options["language"] = "ja" unless options.has_key?("language")
  • when /shift_jis/ni
  • content = NKF::nkf('-s -m0 -x', content)
  • options["language"] = "ja" unless options.has_key?("language")
  • end
  • end - options["length"] = content.bytesize.to_s output = stdoutput output.binmode if defined? output.binmode =end

History

#1 Updated by Yui NARUSE almost 7 years ago

=begin
1.9 になっても当面は nkf が削除される予定はありませんので、
無理に依存を削る必要はないんじゃないですかね。
# アレはテキストフィルタであって、文字コード変換しかできないわけではないので

language の自動付与はー、削っていいかもしれませんが、わざわざ消す必要があるのかなぁ。
# RubyI18N が出てくると String が言語を持ったりするんですかね。

content の文字コード自動変換は削っちゃうとまずいんじゃないですかねぇ。
ここで String#encode を使うようにするとか、日本語以外にも対応するとかだとアリかもしれませんね。
=end

#2 Updated by Takeyuki FUJIOKA almost 7 years ago

=begin
すみません、いずれは削除されるのかと思っていました。
languageの自動付与は日本語だけをサポートするのもどうかと思います。
しかも、UTF-8は自動付与されないですし。
contentの文字コード自動変換も日本語だけサポートするのはどうかと思います。
Rubyが日本語のための言語だったらそれでいいのかもしれませんが、
マルチリンガルを目指すんだったらない方がいいと思います。
もしくは全部自動変換するようにするとか。
私が思うにはこの自動変換機能よりも自分で
やってもらったほうがいいと思うんですけど。
cgi.out("type"=>"text/html","charset"=>"iso-2022-jp"){content}
と書いていたのが
cgi.out("type"=>"text/html; charset=iso-2022-jp",language=>"ja"){content.encode("iso-2022-jp")}
になるんだと思います。
すべての言語に対して公平になると思うのですが、あまりよくないんでしょうかね?
=end

#3 Updated by Yui NARUSE almost 7 years ago

  • Status changed from Open to Closed

=begin
特にメンテされるわけでもないのに、不用意に自動変換削除のような互換性を損なう変更を加えると、
ぎゃっと言う人がいそうなのを気にしていたんですが、うーん。

っと、ふじおかさんは CGIAlt への置き換えを前提で仰っているのか。
cgi.rb に自動変換を期待しているような人には、今のうちにぎゃっと言ってもらった方がいいかなぁ。

=end

#4 Updated by Takeyuki FUJIOKA almost 7 years ago

=begin
以前に
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/29284
こんなやり取りがあって、utf8は自動変換から抜かれました。
そして、今回は全部抜くチャンスかと思いました。
ギャッと言う人はある程度はいるとは思うのですが、
CGIは出力をUTF-8で出している人はUTF-8で受け取りますし、
SJISで出している人はSJISで受け取ります。つまり変換は必要ありません。
そして、内部的(DB的)にはUTF-8なんだけど入出力はSJISなんだという場合などに
変換してあげる必要があるわけです。そういう場合は自動変換じゃなくて、
変換するコードを書いてもらった方がいいと思っています。

CGIAltへの置き換えはcgi.rbとそのテストを完成させてから考えた方がいいと思うようになりました。
=end

#5 Updated by Toru Iwase almost 7 years ago

=begin

On Sun, 24 Aug 2008 23:42:16 +0900
In article
[ Re: [Bug #475] cgi.rbにNKFに依存したコードが入っている]
SATOH Fumiyasu fumiyas@osstech.jp wrote:

伝聞ですが、ページのエンコーディングとは異なる
エンコーディングで HTTP GET, POST するブラウザもある
みたいですが。

いまどき、そんなブラウザは使っている方が悪いのでは。
脆弱性も盛大にありそうです。

--
Tietew tietew@tietew.net
Blog: http://www.tietew.jp/
PGP: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA

=end

Also available in: Atom PDF