URL может содержать точку с запятой и все еще быть допустимым?

Это не jQuery, но я нашел это: http://detectmobilebrowser.com/

Он предоставляет скрипты для обнаружения мобильных браузеров на нескольких языках, одним из которых является JavaScript. Это может помочь вам с тем, что вы ищете.

Однако, так как вы используете jQuery, вам может потребоваться информация о коллекции jQuery.support. Это набор свойств для определения возможностей текущего браузера. Документация здесь: http://api.jquery.com/jQuery.support/

Поскольку я не знаю, что именно вы пытаетесь сделать, я не знаю знать, какой из них будет наиболее полезным.

После всего этого, я думаю, что вам лучше всего либо перенаправить, либо написать другой скрипт для вывода, используя язык на стороне сервера (если это вариант). Поскольку вы на самом деле не знаете возможностей мобильного браузера x, выполнение логики обнаружения и изменения на стороне сервера будет наиболее надежным методом. Конечно, все это спорный вопрос, если вы не можете использовать язык на стороне сервера:)

35
задан Josh Habdas 25 November 2019 в 04:39
поделиться

7 ответов

A semicolon is reserved and should only for its special purpose (which depends on the scheme).

Section 2.2:

Many URL schemes reserve certain characters for a special meaning: their appearance in the scheme-specific part of the URL has a designated semantics. If the character corresponding to an octet is reserved in a scheme, the octet must be encoded. The characters ";", "/", "?", ":", "@", "=" and "&" are the characters which may be reserved for special meaning within a scheme. No other characters may be reserved within a scheme.

40
ответ дан 27 November 2019 в 06:38
поделиться

The W3C encourages CGI programs to accept ; as well as & in query strings (i.e. treat ?name=fred&age=50 and ?name=fred;age=50 the same way). This is supposed to be because & has to be encoded as & in HTML whereas ; doesn't.

27
ответ дан 27 November 2019 в 06:38
поделиться

The semi-colon is a legal URI character; it belongs to the sub-delimiter category: http://www.ietf.org/rfc/rfc3986.txt

However, the specification states that whether the semi-color is legitimate for a specific URI or not depends on the scheme or producer of that URI. So, if site using those links doesn't allow semi-colons, then they're not valid for that particular case.

12
ответ дан 27 November 2019 в 06:38
поделиться

http://www.ietf.org/rfc/rfc3986.txt охватывает URL-адреса и символы, которые могут появляться в незакодированной форме. Поскольку URL-адреса, содержащие точки с запятой, правильно работают в браузерах, ваш код должен их поддерживать.

5
ответ дан 27 November 2019 в 06:38
поделиться

Цитирование RFC не очень помогает при ответе на этот вопрос, потому что вы встретите URL-адреса с точкой с запятой (и запятыми, если на то пошло). У нас было регулярное выражение, которое не обрабатывало точки с запятой и запятые, и некоторые из наших пользователей NutshellMail жаловались, потому что URL-адреса, содержащие их, действительно существуют в дикой природе. Попробуйте создать фиктивный URL-адрес в Facebook или Twitter, содержащий ";" или ',', и вы увидите, что эти две службы правильно кодируют полный URL.

Я заменил используемое нами регулярное выражение следующим шаблоном (и проверил, что он работает):

 string regex = @"((www\.|(http|https|ftp|news|file)+\:\/\/)[&#95;.a-zA-Z0-9-]+\.[a-zA-Z0-9\/&#95;:@=.+?,##%&~_-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)])";

Это регулярное выражение взято из http://rickyrosario.com/blog/converting-a-url-into -a-link-in-csharp-using-regular-expressions / (с небольшими изменениями)

1
ответ дан 27 November 2019 в 06:38
поделиться

Да, точки с запятой допустимы в URL. Однако если вы берете их из относительно неструктурированной прозы, вероятно, можно предположить, что точка с запятой в конце URL подразумевается как пунктуация предложения. То же самое относится и к другим знакам препинания, таким как точка, вопросительный знак, кавычки и т.д..

Если вас интересуют только URL с явным протоколом http[s], и ваш regex поддерживает lookbehinds, этого regex будет достаточно:

https?://[\w! #$%&'()*+,./:;=?@\[\]-]+(?

После протокола он просто подбирает один или несколько символов, которые могут быть допустимыми в URL, не заботясь о структуре. Но затем он отступает на столько позиций, сколько необходимо, пока последний символ не окажется чем-то, что может быть пунктуацией предложения.

4
ответ дан 27 November 2019 в 06:38
поделиться

Технически, точка с запятой является законным разделителем в строке URL; множество источников цитируется выше, включая http://www.ietf.org/rfc/rfc3986.txt.

И некоторые используют ее в законных целях, хотя ее использование, вероятно, зависит от конкретного сайта (т.е. только для использования на этом сайте), потому что ее использование должно быть определено сайтом, который ее использует.

Однако в реальном мире точка с запятой в URL используется в основном для того, чтобы скрыть вирус или фишинговый URL за легитимным URL.

Например, если послать кому-то письмо с такой ссылкой:

http:// www.yahoo.com/junk/nonsense;0200.0xfe.0x37.0xbf/malicious_file/

то ссылка Yahoo! (www.yahoo.com/junk/nonsense) будет проигнорирована, поскольку, несмотря на то, что она легитимна (т.е. правильно сформирована), такой страницы не существует. Но вторая ссылка (0200.0xfe.0x37.0xbf/malicious_file/) предположительно существует*, и пользователь будет направлен на страницу malicious_file; после этого корпоративный IT-менеджер получит отчет, а сам пользователь, скорее всего, получит розовый лист.

И прежде чем все скептики поднимут голову, именно так работает новая проблема фишинга в Facebook. Имена, как обычно, изменены, чтобы защитить виновных.

* Насколько мне известно, такой страницы на самом деле не существует. Ссылка приведена только для целей данного обсуждения.

5
ответ дан 27 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

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