Символы позволяются в URL

Я рою DejaVu Sans Mono (он, как предполагается, совпадает с Паникой Без) на моем Mac

179
задан Mark 6 December 2009 в 22:10
поделиться

5 ответов

Из RFC 1738 спецификация:

Таким образом, только буквенно-цифровые символы, специальные символы « $ -_. +! * '(), ", а также могут использоваться зарезервированные символы, используемые для их зарезервированных целей не закодировано в URL.

РЕДАКТИРОВАТЬ: Как правильно указывает @Jukka K. Korpela, этот RFC был обновлен RFC 3986 . Это расширило и прояснило символы, действительные для хоста, к сожалению, это нелегко скопировать и вставить, но я сделаю все возможное.

В первом согласованном порядке:

host        = IP-literal / IPv4address / reg-name

IP-literal  = "[" ( IPv6address / IPvFuture  ) "]"

IPvFuture   = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )

IPv6address =         6( h16 ":" ) ls32
                  /                       "::" 5( h16 ":" ) ls32
                  / [               h16 ] "::" 4( h16 ":" ) ls32
                  / [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
                  / [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
                  / [ *3( h16 ":" ) h16 ] "::"    h16 ":"   ls32
                  / [ *4( h16 ":" ) h16 ] "::"              ls32
                  / [ *5( h16 ":" ) h16 ] "::"              h16
                  / [ *6( h16 ":" ) h16 ] "::"

ls32        = ( h16 ":" h16 ) / IPv4address
                  ; least-significant 32 bits of address

h16         = 1*4HEXDIG 
               ; 16 bits of address represented in hexadecimal

IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet

dec-octet   = DIGIT                 ; 0-9
              / %x31-39 DIGIT         ; 10-99
              / "1" 2DIGIT            ; 100-199
              / "2" %x30-34 DIGIT     ; 200-249
              / "25" %x30-35          ; 250-255

reg-name    = *( unreserved / pct-encoded / sub-delims )

unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"     <---This seems like a practical shortcut, most closely resembling original answer

reserved    = gen-delims / sub-delims

gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

pct-encoded = "%" HEXDIG HEXDIG
167
ответ дан 23 November 2019 в 20:12
поделиться

Допустимые символы в URI либо зарезервированы, либо не зарезервированы (или символ процента как часть процентного кодирования)

http: //en.wikipedia. org / wiki / Percent-encoding # Types_of_URI_characters

говорит, что это RFC 3986 незарезервированные символы (раздел 2.3), а также зарезервированные символы (раздел 2.2), если они необходимо сохранить свое особое значение. А также символ процента как часть процентного кодирования.

41
ответ дан 23 November 2019 в 20:12
поделиться

Они перечислены в RFC3986 . См. Собранный ABNF для URI , чтобы узнать, что и где разрешено, и регулярное выражение для синтаксического анализа / проверки.

7
ответ дан 23 November 2019 в 20:12
поделиться

Из здесь

Таким образом, только буквенно-цифровые символы, специальные символы $ -_. +! * '(), и зарезервированные символы, используемые для их зарезервированные цели могут использоваться без кодирования в URL.

12
ответ дан 23 November 2019 в 20:12
поделиться

Предстоящее изменение касается китайских, арабских доменных имен, а не URI. Интернационализированные URI называются IRI и определены в RFC 3987 . Однако, сказав, что я бы рекомендовал не делать этого самостоятельно, а полагаться на существующую, протестированную библиотеку, поскольку существует множество вариантов кодирования / декодирования URI и того, что считается безопасным по спецификации, по сравнению с тем, что безопасно при фактическом использовании (браузеры) .

3
ответ дан 23 November 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: