Skip to content

Conversation

@salano-ym
Copy link
Member

@salano-ym salano-ym commented Mar 30, 2024

What

  • Uri:にURIをエンコード・デコードする関数を4個追加しました。
  • doc書式の@であるべきところが#になっているのを修正しました。

@Uri:encode_full(uri: str): str

uri をURIとしてエンコードした文字列を返します。以下の文字はエンコードされません。
A-Z a-z 0-9 - _ . ! ~ * ' ( ) ; , / ? : @ & = + $ #

@Uri:encode_component(text: str): str

text をURI構成要素としてエンコードした文字列を返します。以下の文字はエンコードされません。
A-Z a-z 0-9 - _ . ! ~ * ' ( )

@Uri:decode_full(encoded_uri: str): str

encoded_uri をエンコードされたURIとしてデコードした文字列を返します。
以下の文字に対応するエスケープシーケンスはデコードされません。
; , / ? : @ & = + $ #

@Uri:decode_component(encoded_text: str): str

encoded_text をエンコードされたURI構成要素としてデコードした文字列を返します。

Why

close #606

Additional info (optional)

@salano-ym salano-ym requested a review from FineArchs March 30, 2024 17:50
@FineArchs
Copy link
Member

uri系とuri_component系はそれぞれどのような用途で使い分けるものですか?

@salano-ym
Copy link
Member Author

salano-ym commented Mar 31, 2024

encode_uri/?などのURIの予約文字をエンコードしません。(URIに含まれる日本語のエンコードなど)
encode_uri_componentはそれらもエンコードします。(クエリに埋め込むテキストのエンコードなど)
docを修正しました。

let v = "https://example.com/?q=あ"
<: encode_uri(v) // https://example.com/?q=%E3%81%82
<: encode_uri_component(v) // https%3A%2F%2Fexample.com%2F%3Fq%3D%E3%81%82

@FineArchs
Copy link
Member

けっこう数がありますし、新しい名前空間(仮:Uri:)に入れたいですね

@salano-ym
Copy link
Member Author

名前空間をUri:に移動しました。

@FineArchs
Copy link
Member

名前空間と関数名でuriが重複しているのが気になりますね
例えばUri:encode_full Uri:encode_componentなどはどうでしょう?

@salano-ym
Copy link
Member Author

javascript組み込みのencodeURI encodeURIComponentに合わせた方が分かりやすいように思うので関数名はあまり変えたくないという気持ちです。

@FineArchs
Copy link
Member

JavaScriptのユーザーから分かりやすくするには、名前から元の関数名が容易に連想できることが要件です。
Uri:encode_full Uri:encode_componentは'uri'と'encode'の語を含み、'component'の語を含まないものと含むものに分かれているので連想は容易なはずです。

また、昨今のcomponentという語は多様な使われ方をしているため、fullとcomponentを対立関係にすることで意味をわかりやすくできると考えています。

@salano-ym
Copy link
Member Author

fullだと、URIの全体を渡さないといけないように見えたり、全ての文字をエンコードするようにも見えたりする気がします

@FineArchs
Copy link
Member

URIの全体を渡さないといけないように見えたり、

encodeURIは基本的にURIの全体を渡す想定のものではなかったでしょうか?それ以外の用途は稀な気がします。

全ての文字をエンコードするようにも見えたりする気がします

fullから「全ての文字をエンコード」を連想するのは英語的にあまり無いと思います。full textは「全文」ですし、full characterはあえて言うなら「完全な文字」です。

@salano-ym
Copy link
Member Author

実例が確認できたので反映しました。
Uri:decode_fullのdocを正確な表現に修正しました。

@salano-ym salano-ym merged commit 5281d04 into aiscript-dev:master May 12, 2024
@salano-ym salano-ym deleted the encode-uri branch May 13, 2024 02:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

URIのエンコード関数が欲しい

3 participants