Closed inc2734 closed 2 years ago
同様の症状でした。先ほどプルリク送りました。#135
URLのqueryで何らかの不具合が出ているものと思いますが、気づいたことが2点。
・本Issueでも指摘のある、build_query()は、 https://developer.wordpress.org/reference/functions/build_query/ _http_build_query()のラッパですが、 https://developer.wordpress.org/reference/functions/_http_build_query/ build_query()を使うと、_http_build_query()の最後の引数のurlencodeにfalseが渡されurlencodeされないため、 #124 のエラーが引き起こされてしまうものと思いますので、個人的にあまり推奨できないように思います。
・もう一点、
同様の箇所のテストコードに、with_asterisk=foo*bar
になるようassertかけられておりますが、
アスタリスクは、予約語であるため、URLに使用しないのがw3cのドキュメントで推奨されています。
https://www.w3.org/Addressing/URL/4_URI_Recommentations.html
https://webmasters.stackexchange.com/questions/15884/can-i-use-asterisks-in-urls
Other reserved characters
The asterisk ("*", ASCII 2A hex) and exclamation mark ("!" , ASCII 21 hex) are reserved for use as having special signifiance within specific schemes.
Uns
Example 3
The URIs
fxqn:/us/va/reston/cnri/ietf/24/asdf%*.fred
and
news:12345667123%asdghfh@info.cern.ch
are illegal, as all % characters imply encodings, and there is no decoding defined for "%*" or "%as" in this recommendation.
Qiitaの記事では、冒頭部分に、はURLに使って良いような記述がありますが、
同記事の文中、RFC 3986
の箇所の説明で、はreserved
に含まれるので、やはりエンコードが推奨となっています。
https://qiita.com/aosho235/items/0581fc82f8ce2c5ac055
RFC 2396にはあったreservedという文言がなくなっているが、sub-delims、":"、"@"がreservedに相当する。よって!'()*の五文字が、以前はunreservedであったが現在はreservedになった、ということ。
どのRFCに従うかという話ではありますが、他のフレームワークになりますが、Laravelを参照するところ、RFC 3986
準拠でURLエンコードがデフォルトのようです。
Wordpressの、build_query()および、_http_build_query()は、WordPress独自のパーサのようなので、どのような経緯で、独自アルゴリズムにしているのかはわかりませんが、
ひとまずPHPのhttp_build_query()にて、RFC 3986でエンコードした想定で、プルリクエストを送りました。
補足としまして、半角スペースを+
と変換するか、%20
と変換するか別の問題がありますが、%20
としてます。
ご検討ください。
マージしました!ありがとうございます!
メールで報告をもらいました。