web-dev-qa-db-ja.com

HTMLリンクを使用してリクエストヘッダーに「Content-Type ... charset」を設定する方法

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エンコードを設定することです。

19
HAL 9000

これはHTMLからは不可能です。最も近いものは、accept-charset<form>属性です。 MSIEブラウザーのみがそれを順守していますが、それでも間違っています(たとえば、ISO-8859-1を送信したと言ったときにCP1252が実際に使用されます)。他のブラウザはこれを完全に無視しており、応答のContent-Typeヘッダーで指定されている文字セットを使用しています。文字エンコードの権利の設定は、基本的にサーバー側の責任です。クライアント側は、サーバーが応答を送信したのと同じ文字セットで送信するだけです。

要するに、サーバー側から完全に文字エンコーディングを設定する必要があります。 URIEncoding属性を編集できないことを克服するため、SOの誰かが(複雑な)フィルターを作成しました: TomcatでURIエンコードを自動的に検出する 。役に立つかもしれません(注:私はテストしていません)。


Update:質問で与えられたメタタグはignoredコンテンツがHTTP経由で転送される場合。代わりに、HTTP応答Content-Typeヘッダーを使用して、コンテンツタイプと文字エンコーディングを決定します。 Netパネルで、たとえば Firebug でHTTPヘッダーを決定できます。

alt text

20
BalusC