2

Mojarra2.1.7の使用

コード

<h:outputLink value="index.jsf">Login page
    <f:param name="test" value="! åöä"></f:param>
</h:outputLink>

出力: index.jsf?test =%21+åöä

一部のキャラクターは逃げましたが、他のキャラクターは逃げませんでした。明らかに扱いが非常に難しい。

なぜこれであり、誰かがこれを管理するための良い方法を知っていますか?

http://docs.oracle.com/javase/6/docs/api/java/net/URLEncoder.html

+でスペースを解析するため、使用されているようです。

他のすべての文字は安全ではなく、最初に何らかのエンコード方式を使用して1つ以上のバイトに変換されます。次に、各バイトは3文字の文字列 "%xy"で表されます。ここで、xyはバイトの2桁の16進表現です。使用する推奨エンコーディングスキームはUTF-8です。ただし、互換性の理由から、エンコーディングが指定されていない場合は、プラットフォームのデフォルトのエンコーディングが使用されます。

答えてくれてありがとう

4

1 に答える 1

1

JSFで生成されたHTMLコードを、ブラウザのステータスバーまたはアドレスバーに表示されるものと混同していませんか?確かに、生成されたHTMLコードにはすでに完全にURLエンコードされています。簡単なテストを行ったところ、ブラウザの[ソースの表示]によると、次のHTMLが生成されました(JSF2 / Faceletsのデフォルトの応答エンコーディングであるUTF-8を変更していないと仮定します)。

<a href="index.jsf?test=%21+%C3%A5%C3%B6%C3%A4">Login page</a>

ただし、実際、ChromeとFirefoxはindex.jsf?test=%21+åöä、リンクにカーソルを合わせるとブラウザのステータスバーに表示され、リンクをクリックするとアドレスバーにも表示されます。これはブラウザ固有の機能であり、まったく別の問題です。

あなたがそれについて何も言わなかったのであなたの具体的な問題が何であるかはわかりませんが、あなたが質問をする方法は私にリクエストURLが問題のservletcontainerによって適切にURLデコードされていないという印象を与えますリクエストパラメータへのアクセス中に文字化けを受信しました。

ご想像のとおり、これはservletcontainer側で解決する必要があります。どちらを使用しているかも不明なので、TomcatとGlassfishの例を次に示します。

  • Tomcatでは、Tomcatの要素のURIEncoding属性をに設定する必要があります。<Connector>server.xmlUTF-8

    <Connector ... URIEncoding="UTF-8">
    
  • <parameter-encoding>Glassfishでは、以下に追加する必要があります/WEB-INF/glassfish-web.xml

    <parameter-encoding default-charset="UTF-8" />
    

スペースの「解析」(実際には「エンコード」は正しい用語です)+については、なぜそれを指摘したのかわかりませんが、URLクエリ文字列のスペースは単にエンコードされることになっています。あなたはそれを期待していたと思いますが%20、それはURLの階層部分(クエリ文字列の前の部分で、で区切られている部分)のスペース?がエンコードされる方法にすぎません。

于 2012-09-05T16:19:23.083 に答える