送信データがunicodeになってしまうのを防ぐには?(IEのみ)

[上に] [前に] [次に]
とこやん 1999/12/07(火) 18:07:17
皆さまこんにちわ。

../199812/98120079.htm

../199904/99040211.htm
で皆さまお困りのように、私も同じ問題に直面してしまいました。

新しいウィンドウをJavaScriptで開いて、そこからフォームデータを送信する時に、
IE5.0(win)、IE4.5(mac)では、文字化けしたデータが送られてしまいます。
これは、unicodeで送るという仕様変更により起こる現象のようです。
ちなみにNNでは、全然へいきでした。

これについて、皆さまどの様に対策されているのでしょうか。
サーバ側?クライアント側?
../199812/98120079.htm
で、omiさんが述べられているように、クッキーを介す方法でも良いのですが、
なにぶんデータが大きいものでして。。。

宜しくお願い致します。

P初心者 1999/12/07(火) 22:14:48
試していないけど、以下は試す価値あり!?

function func() {
  w = window.open();
  with (w.document) {
    writeln("<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=Shift_JIS'>");
    writeln("<HTML><HEAD><TITLE>テスト</TITLE></HEAD><BODY>");
    writeln("<FORM METHOD=POST ACTION='xxx.cgi'>");
    writeln("<INPUT TYPE=text NAME='NAME'>");
    writeln("<INPUT TYPE=submit VALUE='OK'>");
    writeln("</FORM></BODY></HTML>");
    close();
  }
}

charsetはお好きなコードに〜

P初心者 1999/12/07(火) 22:27:09
間違えました!
<META>タグは<HTML>タグの後に入れてきださい!

とこやん 1999/12/08(水) 11:45:28
P初心者さん、こんにちわ。

METAタグ入れてみましたが、JavaScriptで開いたウィンドウに対しては、
やっぱり文字コードの指定は出来なかったです。。。
ちなみに、仮にhtmlファイルを用意し、それをwindow.openさせたところ、
文字コードの指定も出来ましたし、文字化けも起こりませんでした。

JavaScriptで記述した新しいwindowのみ、不具合が発生するようです。
これがIEの仕様と言うものなのでしょうか???
#VBScriptを使えと言うのかしら?

P初心者 1999/12/08(水) 13:00:22
私も試しました!
とこやんさんと同じでした!

>これがIEの仕様と言うものなのでしょうか???

バグでしょ〜
IE3の時、よく漢字コードで泣かされました!
IE4で良くなったと思ってましたが、こんなところにまだ残骸が...。

あとは、まだ、凄い人がウォッチしていると思いますので様子をみましょう。

とこやん 1999/12/08(水) 16:45:04
P初心者さん、ありがとうございます。
バグですか。そうですか。とほほ。。。

もう少し様子を見てみたいので、「解決」マークはつけないでおきます。
すみませんが、宜しくお願い致します。

zizz... [HomePage] 1999/12/12(日) 15:37:32
私は全然分かっていない人ですが、調べた結果を書きます。
フォームデータの話ではなく、escape関数の話ですが。

RFC 2396 "Uniform Resource Identifiers (URI): Generic Syntax"では
「エンコードはどうしようかな」みたいなこと(意訳)が書いてあります。
http://www.ietf.org/rfc/rfc2396.txt

RFC 2718 "Guidelines for new URL Schemes"では
    Unless there is some compelling reason for a
    particular scheme to do otherwise, translating character sequences
    into UTF-8 (RFC 2279) [3] and then subsequently using the %HH
    encoding for unsafe octets is recommended.
となっており、まずUTF-8でescapeすることを勧めています。
好き勝手にescapeされると対応が面倒なので、UTF-8で一本化しようという方針らしいです。
http://www.ietf.org/rfc/rfc2718.txt

ここからJavaScriptの話。
escape(string)でUnicodeを使うのは仕様です。
ECMAScript 2でそうなっており、3 (Final Draft)でも変わっていません。
NetscapeのJavaScript 1.4 Referenceを見ると、
ECMAScriptに逆らって、今まで通りISO-Latin-1を使うとあるのですが、
Mozillaで動作確認してみると見事にUnicodeを使ってくれます。(笑)

ECMAScript 3 (Final Draft)を眺めていたら、
encode(uri)
というものを発見しました。
名前の通りの動作をするものですが、これもUTF-8 encodingです。
RFC 2718に従っているようです。

いろいろ書きましたが、まだ解決方法がわかりません。
最近のJavaScriptは内部でUnicodeを使っているし、自力で変換するのは難しいのではないでしょうか。

とこやん 1999/12/14(火) 19:09:15
zizz... さん、ありがとうございます。
こんなにいろいろ調べて頂き、勉強になります。

>最近のJavaScriptは内部でUnicodeを使っているし、自力で変換するのは難しいのではないでしょうか。

知りませんでした。すみません、勉強不足ですね。
現在急ぎ、リファレンスを翻訳中です。
(しっかし、Unicodeに関しては、NN、IE共に挙動不審ですね。。。)

ただ、今回の問題ですが、IE+JavaScriptの組み合せのみNGという理由が分からないんですよね。
NN+JavaScript、NN+HTML、IE+HTMLでは、送るデータがunicodeで何であれ、
サーバ側が解読してくれるのに、最初の組み合わせでは文字化けする。

もう、これはお手上げですかねぇ。。。

zizz... [HomePage] 1999/12/14(火) 21:56:06
> encode(uri)
encodeURI(uri) の間違い。

> 現在急ぎ、リファレンスを翻訳中です。
翻訳してどこかのサイトにアップしてくれるの?それなら助かる。
それとも翻訳機にかけているだけ?

> NN+JavaScript、NN+HTML、IE+HTMLでは、送るデータがunicodeで何であれ、
> サーバ側が解読してくれるのに、最初の組み合わせでは文字化けする。
%uXXXXでもサーバーが期待通りに解釈してくれたのですか?

shin' [E-Mail] 1999/12/17(金) 00:56:37
なんか収束したみたいですが…。
フォームで漢字を次のページに渡したときにIEとNetscapeだと
違う、という問題を僕はVBScriptで回避しました。
Netscape(エラーが出ない4以降)ならJavaScriptとVBScriptを
同居させてもぜんぜん平気ですが、IEだときつくしかられるので
同居させるしくみ、またはVBScriptを実行させるタイミングが
問題です。ちなみに僕はVBScriptだけのページを別に開いて
親ウィンドウと同期をとるという方法をとりました。参考まで。

とこやん 1999/12/17(金) 10:09:59
zizz...さん、shin'さん、こんにちわ。返信が大変遅れ、申し訳ありませんです。

zizz...さん>%uXXXXでもサーバーが期待通りに解釈してくれたのですか?

すみません。私の方が勘違いをしていたようです。
IISは、Unicodeも対応しているとMSのサイトに明記されていたので、
NTの内部処理はUnicodeで行っているらしい、という情報とあわせて、
IEはデータを全てUnicodeで送る、と勝手に解釈しておりました。

IEも、ちゃんと、HTMLで記述した文字コードで送っているのかな?

shin'さん>VBScriptで回避しました。

この方法が一般的なようですね。
JavaScriptなページと、VBScriptなページを用意するしかないのでしょうかねぇ。

そうそう、リファレンスの翻訳の件ですが、
友人に翻訳を依頼していたのですが、「専門用語が分からないから、わからん!」
と言われてしまいました。確かにそうですよね。
法律の専門家には、分からない用語だらけだよね。。。
と言う訳で、アップできません。ごめんなさい。

[上に] [前に] [次に]