JavaScriptで開いたページの文字コードを指定するには?

[上に] [前に] [次に]
とほほ 1998/12/13(日) 18:49:55
IE4.0のJavaScriptでページを開いて、そのページのフォームからCGI
を起動したのですが、文字化けしてしまいます。JavaScriptのopen()
で開いたページの文字コードが「ユニバーサル文字」になってしまうの
が原因ではないかと思うのですが、回避策をご存知の方はいませんか?
(ラウンジで使おうと思ったのに・・・・(;_;)

function func() {
  w = window.open("index.htm");
  with (w.document) {
    open();
    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();
  }
}

ちはる [E-Mail] 1998/12/15(火) 01:56:51
これだとうまく行きますけど、どうでしょう?

function func2() {
w = window.open();
with (w.document) {
  writeln("<HTML><HEAD><TITLE>テスト</TITLE></HEAD><BODY>");
  writeln("<FORM METHOD=POST ACTION='xxxx.cgi'>");
  writeln("<INPUT TYPE=text NAME='NAME'>");
  writeln("<INPUT TYPE=submit VALUE='OK'>");
  writeln("日本語が表示できるかな?");
  writeln("</FORM></BODY></HTML>");
  close();
}
}

index.htmを取り払ってますが。。。無いとダメなんでしょうか?新しいwindowを開いて、そこにJavaScriptでフォームを書くという事ですよね??(間違ってたらすいません)

とほほ 1998/12/16(水) 01:37:40
うーん、どうも、私の環境ではうまく動作しないのですが・・・
テキストフィールドに日本語を入力して[OK]すると、jcode.plで解釈
できないような妙な漢字コードがxxx.cgiに渡されてしまうのです。
ちはるさんの環境はどんな環境ですか?

omi 1998/12/16(水) 10:50:18
回避策にはほど遠いのですが、
writeln("<INPUT TYPE=submit value='OK' onClick=\"document.cookie='NAME='+ document.Form.NAME.value +'; expires=Fri, 11-Nov-2011 02:11:11; ';\">");
で送れば、漢字もそのまま表示されます。ウソのようなホントの話。
~ s/%([ 〜  pack("C",hex($1))/eg;  、も必要ナシです。
例えば、
<INPUT type=text name='NAME' value='123愛あイルabc'>  、とすれば
$ENV{'HTTP_COOKIE'} 、の値は、NAME=123愛あイルabc 、でした。
文字化けは、
$ENV{'QUERY_STRING'} 、も、$ENV{'QUERY_STRING'} 、も
123abc諢帙≠縺・ と大化けしています。
NNでは、123abc%88%A4%82%A0%82%A2 と化けないのにねー。
クッキーは、益ます手放せません。

omi 1998/12/16(水) 11:39:21
ANhttpd1.02 iE4.72.3110.1 だけのテストなので問題アリですね。
漢字がそのまま送られると、オンライン上で化けないはずハズがないですね。
escape()をすると、Unicode で送られるらしく、B-Cus さんのお話では、
変換が大変そうです。
airnet にあるログの漢字を見る分には、文字化けしてません。

訂正、'123愛あイルabc' は '123abc愛あい' です。

とほほ 1998/12/17(木) 00:47:45
おぉ!! すごい!! Cookieとは気づきませんでした。でも、Cookieだと、
シェルに食われてしまう文字とか、文字数問題とか、問題もありそうで、
ちょっと恐いですね。(このラウンジの発言を送信しようとしているの
です。) うーむ。

ちはる 1998/12/17(木) 01:12:49
あっすいません、そういう事だったのですね。。送信文字列がunicodeになってしまう。。
ちょっと余談になるんですけど、マック版のIE4で、Javascriptで、
document.write("あああああ"); これはそのまま表示されますが、
arrayに文字列をT_array[0]="ああああ" としておいて、
document.write(T_array[0]); をやると、同様(?)に
化けてしまいます。ちょっと似てますね。
この場合、T_arrayには、unicodeでエンコードした%u5044・・・
みたいな文字列を入れておいてunescape()するとうまく行きます。。

ちはる 1998/12/17(木) 02:05:13
回避策になるかどうか、わかんないですが、
もう一つ別のウィンドウを開いておいて、
そちらにはhtmlでフォームをっておき、
(たとえばwindow名をsub,そこに作ったフォームの名前をxxとします)

<INPUT TYPE=button VALUE="変換" onClick="sub.document.xx.text.value=document.form.text.value)">
等として、そちらに渡すと、そちらはSJISの状態で文字がはいりますから、
こちらで送信してしまうっていうのはどうかなぁ。。
(いまいちスマートでないですが)

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