43404


GoのWAFであるEcho (<https://github.com/labstack/echo>)
を使ってサイトを作成しています。そこでタイトルのような挙動に出くわしました。

つまり、  
`http://localhost:3000/tag/%E3%82%AA%E3%83%9E%E3%82%B1`

というURLと  
`http://localhost:3000/tag/%e3%82%aa%e3%83%9e%e3%82%b1`

というURLで得られる値が違うという結果になってしまいます。前者のURLではちゃんとデコードされますが、後者はデコードされずにエンコードされたままの文字列を取得します。なぜこのような挙動がおこるのでしょうか。

パスパラメータの取得部分のコードは以下のようになっています。

**コード例**

[code]

    tagName := c.Param("name")
    fmt.Println(tagName)
    
[/code]

**出力**

前者の場合

[code]

    オマケ
    
[/code]

後者の場合

[code]

    %e3%82%aa%e3%83%9e%e3%82%b1
    
[/code]


CC BY-SA 3.0
2018-04-19T14:31:01.867
43398
2020-05-16T21:52:20.773
2020-05-16T21:52:20.773
19110
7232
question
go go-echo
Golang echoフレームワークでURLエンコードされたパスパラメータが大文字と小文字の場合で異なる。


~~[URL
Standard](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0)
に従うと、パーセントエンコーディングでは、`%` 記号の後に数字または `A` から `F` までの **大文字**
アルファベットを使うと決められています。~~

上の回答は、[的を射ていません](https://ja.stackoverflow.com/questions/43398/golang-
echo%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A7url%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%95%E3%82%8C%E3%81%9F%E3%83%91%E3%82%B9%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%8C%E5%A4%A7%E6%96%87%E5%AD%97%E3%81%A8%E5%B0%8F%E6%96%87%E5%AD%97%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%A7%E7%95%B0%E3%81%AA%E3%82%8B/43404?noredirect=1#comment44796_43404)。修正します。

* * *

これは echo の挙動に原因があります。

StackDestroyer さんの[ご指摘](https://ja.stackoverflow.com/questions/43398/golang-
echo%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%A7url%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%95%E3%82%8C%E3%81%9F%E3%83%91%E3%82%B9%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%8C%E5%A4%A7%E6%96%87%E5%AD%97%E3%81%A8%E5%B0%8F%E6%96%87%E5%AD%97%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%A7%E7%95%B0%E3%81%AA%E3%82%8B/43404?noredirect=1#comment44799_43404)どおり、これは
echo 側で URL を扱う際 `URL.RawPath`
を自前で処理しており、エンコードが大文字か小文字かで差異が生じてしまっています。[`net/url` の
godoc](https://golang.org/pkg/net/url/#URL) も合わせてご覧ください。

おそらく今回のご投稿が発端かとは思われますが、echo の issue
トラッカーに[この挙動が報告されています](https://github.com/labstack/echo/issues/1117)。これが修正されるまで待つか、それぞれのエンコードに対してアドホックに対応するのが良いと思います。


CC BY-SA 4.0
2018-04-19T15:54:25.997
43404
2018-05-18T11:52:24.840
2018-05-18T11:52:24.840
19110
19110
43398
answer