[Seasar-user:17572] Re: 【SAStruts】 urlPatternに使えない文字について

Tomoyuki Kano [E-MAIL ADDRESS DELETED]
2009年 6月 1日 (月) 16:14:09 JST


加納です

Kento SAWADA さんは書きました:
> 2) nameに「 」(スペース)が含まれている場合
>
> URLエンコード時にスペースは「+」に置換されますが、
> request.getServletPath()では「+」をスペースに置換しないため
> (Apache Tomcat 5.5.26にて。バグ?)
> 本来はスペースであるはずの部分が「+」になってしまう。
> 「%2B」が「+」にデコードされてしまうため、スペースなのか「+」なのか
> 区別できない。

本題とずれますが、tomcatの挙動は仕様通りです。
HttpServletRequest#getPathInfo()/getServletPath() は CGI の
PATH_INFO/SCRIPT_NAME と等価でRFC3875に従っています。

フォームのエンコードで使用するHTMLの規定するx-www-form-urlencodedが
' ' -> '+' と変換するのとは異なり、
HTTPのリクエストURLのエンコードでは RFC2396/RFC3875 の規定から
考えると ' ' -> '%20'とするべきです。

これは、 http://...../?a+b
といったquery形式のために '+' は予約されているからです。

この誤解は、(PHPの uelencode()/urldecode() が広めたためか)よく見かけます。

Yasuo Higa さんは書きました:
> 個人的には、/や?エンコードしてURLとして使えるようにするのは、
> あまり賛成できません。
> 何かとトラブリそう。

サーバーの構成によってや、servlet API的にデコード前の生のURLを
取得するのはそもそも難しいのではないかと。

--
tomo.




Seasar-user メーリングリストの案内