UTF-8でエンコードされたリンクを持つシンプルなHTMLページがあります。
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<a charset='UTF-8' href='http://server/search?q=%C3%BC'>search for "ü"</a>
</body>
</html>
ただし、ブラウザでContent-Type:application/x-www-form-urlencoded; charset=utf-8
をリクエストヘッダーに含めることはできません。そのため、すべてのリクエストがUTF-8エンコード(Tomcat server.xmlのURIEncoding = "UTF-8")であると想定するようにWebサーバーを構成する必要があります。しかしもちろん、管理者は実稼働環境(Websphere)でそれを許可しません。
Ajaxを使用して達成するのは非常に簡単ですが、標準のHTMLリンクを使用する場合、リクエストヘッダーをどのように制御できますか? charset
属性は機能しないようです(IE8およびFF 3.5でテスト済み)
必要なソリューションの2番目の部分は、Javascriptを使用してIFrameのdocument.location
を変更するときにURLエンコードを設定することです。
これはHTMLからは不可能です。最も近いものは、accept-charset
の<form>
属性です。 MSIEブラウザーのみがそれを順守していますが、それでも間違っています(たとえば、ISO-8859-1を送信したと言ったときにCP1252が実際に使用されます)。他のブラウザはこれを完全に無視しており、応答のContent-Type
ヘッダーで指定されている文字セットを使用しています。文字エンコードの権利の設定は、基本的にサーバー側の責任です。クライアント側は、サーバーが応答を送信したのと同じ文字セットで送信するだけです。
要するに、サーバー側から完全に文字エンコーディングを設定する必要があります。 URIEncoding
属性を編集できないことを克服するため、SOの誰かが(複雑な)フィルターを作成しました: TomcatでURIエンコードを自動的に検出する 。役に立つかもしれません(注:私はテストしていません)。
Update:質問で与えられたメタタグはignoredコンテンツがHTTP経由で転送される場合。代わりに、HTTP応答Content-Type
ヘッダーを使用して、コンテンツタイプと文字エンコーディングを決定します。 Netパネルで、たとえば Firebug でHTTPヘッダーを決定できます。