我々は同様に、ここではすなわち、私たちの製品を同じような状況を持っているが、地球上の潜在的にあらゆる言語でユーザーに意味のあるURLを表示するために必要とされます。私たちのツールとテクニックはすべてUTF-8をサポートしているので、問題はありません。 IE(7,8)は醜いエスケープされたURLを表示しますが、FirefoxはエスケープしてURLを表示します。つまり、 '/français/Banane.html'は '/ fran%'としてIEに表示されます。 C3%A7ais/Banane.html ' フォーム提出後のPOST /リダイレクト後のGETは、UTF-8 URLを送信したり、UTF-8 URLをエスケープしたりすることはありません。また、XMLスタイルの数字エンティティコーディングを成功させずに使用しようとしました。
しかし、私たちは最終的に、POST後にうまくリダイレクトする方法を見つけました.ISTF-8文字列をISO-8859-1をバイト単位でエンコードしています。とにかくこれがどのように機能するのか私たちは本当に理解していません(どのようにしてブラウザがそれを解読するかを知ることができます、utf-8文字あたりのバイト数が変わる可能性があり、ブラウザは元々utf-8ですか?します。リダイレクト先のコピーについては
package springapp.web.servlet;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = -1743198460341004958L;
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String url = "çöffte.html";
try {
ServletContext context = req.getSession().getServletContext();
// read utf8 encoded russian url
if (context.getResource("/WEB-INF/ru_url.txt") != null){
InputStream is = context.getResourceAsStream("/WEB-INF/ru_url.txt");
if (is != null){
url = IOUtils.toString(is, "UTF-8");
System.out.println(String.format("Redirecting to [%s]", url));
}
}
}
catch (FileNotFoundException fNFEx) {
fNFEx.printStackTrace();
}
catch (IOException ioEx) {
ioEx.printStackTrace();
}
byte[] utfBytes = url.getBytes("UTF-8");
String result = new String(utfBytes, "ISO-8859-1");
resp.sendRedirect(result);
// does not work:
//resp.sendRedirect(url);
//resp.sendRedirect(Utf8UrlEscaper.escapeUtf8(url));
//resp.sendRedirect(Utf8UrlEscaper.escapeToNumericEntity(url));
}
}
をし、例えば任意のネイティブ言語のURLを貼り付けます。ここでは
はそれを試してみるための単純なサーブレットですwikipediaからUTF-8でエンコードされたファイル(BOMなし)で保存し、WEB-INFディレクトリに保存します。この例では、ロシアのURL(http://ru.wikipedia.org/wiki/Заглавная_страница) を「ru_url.txt」という名前のファイルに保存しました。
任意の* .abc urlをテストサーブレットにマッピングする単純なSpringMVCアプリケーションを作成しました。 あなたがアプリを起動し、 'localhost:8080/springmvctest/a.abc'のようなものを入力すると、ロシアのwikipediaサイトにリダイレクトする必要があります。ブラウザ(IEとFirefox、Safariなど) -8エンコードされたネイティブローションURL。