RFC1808 не определяет внутренний формат строки запроса. Я считаю, что точка с запятой, о которой говорит 1808, - это дополнительная информация другого рода (о путях), которая на практике никогда не используется.
Насколько я вижу, интерфейс NSURL не включает никаких методов, которые занимаются разбором / разбиением содержимого самой строки запроса, так что это не представляет интереса для класса, и действительно, ваш URL-адрес соответствует 1808.
На самом деле строки запросов по сути не имеют определенного RFC-формата; Вы можете прекрасно поместить любую строку в них и получить их нетронутыми на стороне сервера. Однако стандарт HTML описывает способ создания строк запроса из содержимого формы, и этот формат application/x-www-form-urlencoded
используется большинством серверных сценариев.
В соответствии с разделом HTML4 17.13.4.1, &
- это браузер с разделителем параметров, должен использовать для создания строк запроса из нескольких параметров, поэтому да, вы должны поддерживать амперсанд в качестве разделителя параметров. HTML4 рекомендует, чтобы серверные сценарии принимали точку с запятой в качестве альтернативного разделителя для амперсанда в строках запроса, поскольку это позволяет избежать дополнительного экранирования. Но это не требуется, и действительно (к сожалению) многие среды чтения серверов / форм не используют точку с запятой для этой цели.