具体的におたずねします。
オークションサイト一括検索サイトを作っているのですが、JavaScriptで、検索をかけるurlを送信(?)しても、
検索文字が日本語だと検索できないサイトがあり困っています。
window.location.href = xxxx;
という感じで、新たなブラウザを開いてやってます。
xxxxには
"http://auction.curio-city.com/itemlist.jsp?pn=0& …
などが入ります。
上記でアクセスすると検索文字が"test"なので問題ない
のですが、
"http://auction.curio-city.com/itemlist.jsp?pn=0& …テスト"
などとするとエラーになってしまいます。
調べた結果、文字列をURLコードというものに変換すれば解決しそうなのですが、JavaScriptでこれを行うのは不可能に近いようです。
どんな方法でもよいので、日本語で検索できるようにする方法はないものでしょうか?
どうかお詳しい方よろしくお願い致します。m(_ _)m
No.2ベストアンサー
- 回答日時:
name="form1"なる属性を持つformをsubmitする場合、
document.forms.form1.submit();
でできますので、「複数同時に」というのはそれほど問題ではないと思います。
しかし、例示されているページを調べてみたところ、Shift_JISでのエンコードを前提としてクエリー文字列を受け取っているようでした。
このため、window.open()で新しいページを開いてフォームを書き込み、それをsubmitする、という方法ではうまくいきません。
(書き込まれるコードがShift_JISとは限らないため。ちなみにIE6ではUnicodeのようでした。)
従って、文字コードの問題を解決するための小細工が必要になります。
1.VBScriptを利用する
VBScriptにはUnicodeへの変換なしに文字コードを取得する関数がありますので、これを使用すれば自力でエンコードできます。
但し、NetscapeはVBScriptを実行できません。
2.JavaScriptで小細工する
この場合、madmanさんのご指摘通り、ブラウザのエンコード機能を利用することになります。
が、ブラウザにShift_JISでエンコードしてもらうためには、submitするフォームが所属するページがShift_JISで書かれている必要があります。
このため、Shift_JISで書かれたスケルトンページを用意し、そのページをwindow.open()で開いて値を設定し、submitする、という方法が考えられます。
但し、異なるウィンドゥへのデータの書き込みは制限されているため、
スケルトンページ側に書き込み用関数を用意して、それを通してキーワードを設定する、という手順が必要になります。
DHTMLを使用しない場合には、スケルトンページはオークションサイトの個数分用意しなければなりません。
DHTMLを使用する場合には、スケルトンページは1つでできますが、古いブラウザには対応できなくなります。
ちなみに、HTML中でクエリー文字列付きのURIを記述する場合には、"&"は"&"と記述するのが正解です。
とても詳しいご回答ありがとうございます。
その後、複数のブラウザを開いて検索するのは後回しにし、ひとまずsubmit()でformの値を送信することに成功しました。複数のブラウザを開くのなら、formを複数用意し、それぞれを個別に送信するようにすればいいんですよね?そこまではわかりました。また、この方法で一部のサイトは解決しそうです!
しかし、例としてあげたページ(楽天ですが)はEUCコードしか受けつけないようです。zzzzzzさんは、IE6.0ではunicodeのようだとおっしゃってますが、それはURLコードではないでしょうか?
先の方法ではURLコードになるのですが、楽天ではEUCコードしか受けつけないので、エラーとなってしまいます。
ちなみにヤフーではURLコードでもEUCコードでもOKのようです。こちらでその問題が指摘されていました。http://www.survive.ne.jp/lunascape/about.html
JavaScriptでのEUCコードへの変換は漢字コードにしたがって一文字づつ変換しない限り無理とのことで、ほとんど不可能に近いようです。
というわけでほとんど絶望していますが、formを個別にsubmitする方法を教えていただけのは大きな収穫でした。
とりあえず、その後学習したことをまとめて見ましたが、何か間違いがありましたら、ご指摘頂けると幸いです。
ありがとうございました。
No.5
- 回答日時:
ブラウザのJavaScriptの実装を信用するなら、スケルトンなしで次のように書くことができます。
試してみてください。
<HTML>
<HEAD>
<SCRIPT>
function openWithQuery(url, querys, charset) {
var win = window.open();
win.document.open();
win.document.charset = charset;
var tmpstr = new Array();
var i = 0;
tmpstr[i++] = '<HTML>\n<HEAD>\n<META http-equiv="Content-type" content="text/html;charset=' + charset + '">\n</HEAD>\n';
tmpstr[i++] = '<BODY>\n<FORM name="form1" action="' + url + '">\n';
for (var key in querys) {
tmpstr[i++] = '<INPUT type="hidden" name="' + key + '" value="' + querys[key] + '">\n';
}
tmpstr[i++] = "</FORM>\n</BODY>\n</HTML>\n";
win.document.write(tmpstr.join(""));
win.document.close();
win.document.forms.form1.submit();
return win;
}
function search(keyword) {
var url = "http://auction.curio-city.com/itemlist.jsp";
var query = new Array();
query["pn"] = "0";
query["so"] = "4";
query["sd"] = "0";
query["kw"] = keyword;
openWithQuery(url, query, "Shift_JIS");
// オークションサイトを追加する場合にはここに記述
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="form1" onsubmit="search(document.forms.form1.keyword.value); return false">
<INPUT type="text" name="keyword" value="テスト">
<INPUT type="button" value="検索" onclick="search(document.forms.form1.keyword.value)">
</FORM>
</BODY>
</HTML>
この回答への補足
先日は色々と教えていただきましてありがとうございました。実は、その後、同じ楽天でも、これまで指定していたcgiとは別のcgiを指定することで、日本語検索が可能となることが判明し、それで解決してしまいました。せっかく教えて頂いたのに全てを消化できずに終わってしまいましたが、非常に多くの有益な情報を得ることができました。スケルトンページを使った方法は何か別の機会に生かしたいと思います。本当にありがとうございました。
補足日時:2002/04/23 16:07本当に感謝しております。
私一人で考えていたら、一体何日かかったかわかりません。本当にありがとうございます。
win.document.charset = charset;
この操作方法を教えていただいたおかげで、 IEでは全て日本語で検索可能となりました。
問題の楽天に関しては、新たに開いたウィンドウをX-EUC-JPまたはEUC-JPにすると良いようです。
しかし、ネスケではこれは無効のようですね。
ネスケでもどうにかしようと、#5のアドバイスにしたがって新たに書き出す方法でも試してみましたが、こちらでもダメでした。
先に報告しましたようにネスケでは、あらかじめEUC-JPにしておいたページからは日本語検索できることが確認できてますので、おそらくzzzzzzさんの仰るスケルトンページを用意することで解決すると思います。
結果はまた後ほどご報告致します。
No.4
- 回答日時:
>zzzzzzさんは、IE6.0ではunicodeのようだとおっしゃってますが、それはURLコードではないでしょうか?
ビルトイン関数のescape()の話ではなく、window.open()→document.write()で新しいページに書き出したときの、文字コードの話です。
これがUnicodeになっているようですので、スケルトンページの助けなしには、ブラウザのエンコード機能に、文字コードがShiftJISであることを指定できないのではないか、ということが言いたかったのです。
なお、文字コードの問題と、URLエンコードの問題は全く独立のものです。
文字コードがEUCであろうとShiftJISであろうと、URLエンコードをしなければ送信できないことには変わりありません。
>楽天ではEUCコードしか受けつけないので
手でエンコードしてデータを送ってみましたが、やはりShiftJISしか受け付けないようです。EUCではうまくいきませんでした。
と、理屈ばかり書いていても仕方がありませんので、論より証拠、ということで、スケルトンページを使用した実装例を挙げてみました。
但し、この方法はDOM(Document Object Model)の実装を使用しているので、IE5以降か、Netscape6以降でしか利用できません。
#2にも書きましたが、オークションページ毎に個別のスケルトンを用意することでこの制約は回避可能です。
[skeleton.html](必ずShiftJISで保存してください)
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html;charset=Shift_JIS">
<SCRIPT>
// assume browser's exact interpretation of META tag
function addQueryString(name, value) {
var element = document.createElement("INPUT");
element.setAttribute("type", "hidden");
element.setAttribute("name", name);
element.setAttribute("value", value);
document.forms.form1.appendChild(element);
}
</SCRIPT>
<BODY>
<FORM name="form1">
</FORM>
</BODY>
</HTML>
[呼び出し側](適当に名前を付けてください)
<HTML>
<HEAD>
<SCRIPT>
basePage = "skeleton.HTML";
function openWithQuery(url, querys) {
var win = window.open(basePage, "_blank");
var form = win.document.forms[0];
form.action = url;
for (var i in querys) {
win.addQueryString(i, querys[i]);
}
form.submit();
}
function search(keyword) {
var url = "http://auction.curio-city.com/itemlist.jsp";
var query = new Array();
query["pn"] = "0";
query["so"] = "4";
query["sd"] = "0";
query["kw"] = keyword;
openWithQuery(url, query);
// オークションサイトを追加する場合にはここに記述
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="form1">
<INPUT type="text" name="keyword" value="テスト">
<INPUT type="button" value="検索" onclick="search(document.forms.form1.keyword.value)">
</FORM>
</BODY>
</HTML>
この回答への補足
最初の質問時に例として挙げていたurlは「楽天」ではなくて、「大魔オークション」という別のサイトでした。
現在唯一日本語検索できずに困っているのは
http://trading.rakuten.co.jp/
の方で、以下のようフォームを組んで送信しても
検索できず困っています。
<FORM NAME="RakutenF" METHOD="GET" ACTION="http://esearch.rakuten.co.jp/search/e.search" target="_blank">
<INPUT TYPE="hidden" NAME="sitem" VALUE="テスト">
<INPUT TYPE="hidden" NAME="sv" VALUE="5">
</FORM>
懇切丁寧なご回答ありがとうございます。
その後、OKwebからのメールが来ていなかったようだったので、ご回答頂いていたことに今まで気付いていませんでした。
内容もかなり難しくなってきましたので、zzzzzzさんのアドバイスを消化するのに時間がかかりそうですが、後日、結果をご報告したいと思います。
なお、その後、NC4.7ですと、CHARASET を EUC-JPにして送信することで、検索ができました。(他が文字化けしてしまいますが)IE6.0ではエラーとなってしまいました。
今後も調査を続けたいと思います。
なお、現在製作中のサイトのアドレスはこちらです。
http://www.kitanet.ne.jp/~hashimo/okudoku/auctio …
No.1
- 回答日時:
FORMを作成し、各引数をFORMの情報として格納し、指定URIに(この場合
http://auction.curio-city.com)submitするようにすれば問題ないのではないですか?ご回答ありがとうございます。それが一番確実だとは思うのですが、一つのボタンをクリックするだけで、複数のブラウザを開いて複数サイトを検索するようにしたいのです。アドバイス頂いた方法では、それぞれのサイトごとにボタンが必要になるのではないかなと・・・。
一つのFORMから、複数の隠しFORM(こういうのがあるのかどうかは別として)に検索文字を渡して、それを一斉にsubmitというのができればいいのですが・・・いかんせん、レベルが低いので可能かどうかすらも判断できません・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- ドライブ・ストレージ Windows10でのファイル内の文字列検索 SSDに寿命? 4 2022/07/12 03:25
- Visual Basic(VBA) WordのVBAについて 5 2023/01/11 14:38
- SEO 意図しないページが検索ヒットする問題 2 2022/05/19 14:35
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- その他(SNS・コミュニケーションサービス) Yahoo!とGoogle検索のしくみの違いを教えてください 2 2022/08/14 01:53
- その他(プログラミング・Web制作) パイソン。スクレイピング。Chromeドライバーの使い方を教えてください。 1 2023/06/14 21:55
- その他(IT・Webサービス) 検索をしたときに、検索した単語が該当した文がサイトの題名の下に表示されるじゃないですか 1 2023/01/19 23:31
- Google Maps iPhoneのGoogle検索窓を通常の大きさに 戻す方法を教えて頂けませんか?(切実) 日本全国の 2 2022/10/02 02:08
- 日本語 卵と玉子 その2 10 2022/12/16 19:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onchangeイベントを強制的に発...
-
ボタン押下しテキストエリアに...
-
ボタンかリンクをクリックする...
-
ボタンをクリックして文字を置...
-
javascriptでtextareaに文字列...
-
テキストフィールド未入力の場...
-
ページ間の値の引渡し
-
クリックさせたいが、click()が...
-
ブラウザの外にあるマウスの情...
-
javaScriptの変数をJavaの変数...
-
クリックでテーブル内の背景色...
-
BackSpaceしたい(QNo.2734284の...
-
追加ボタンを押した際に ok ボ...
-
return trueとreturn falseの用...
-
プルダウン 項目が多いので先頭...
-
hiddenのvalueの値を変えたい
-
チェックボックスの設定
-
javascriptでASPにデータを渡す
-
テキストエリアをenterキーでフ...
-
クリックの度に加算していくには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onchangeイベントを強制的に発...
-
iOSのみダブルタップが必要
-
onclickが動作しない
-
追加ボタンを押した際に ok ボ...
-
ボタンかリンクをクリックする...
-
innerHTML内では改行は禁止?
-
クリックさせたいが、click()が...
-
javaScriptの変数をJavaの変数...
-
formのfileの値をhiddenでも持...
-
JavascriptでDOM-based XSSの発...
-
クリックでテーブル内の背景色...
-
VB.NETで<Input>タグ、<text...
-
開いた子ウィンドウにあるボタ...
-
jQueryで設定したイベントハン...
-
javascriptで作成されたテーブ...
-
HTMLのテキストボックスへのド...
-
テキストフィールド未入力の場...
-
JavaScriptのfileオブジェクト...
-
JSのボタンを複数う使うには
-
オンクリックで現在時刻の取得→...
おすすめ情報