Как обрабатывать '&' в URL-адресе, отправленном как HTML с iPhone Mail.app - PullRequest
1 голос
/ 21 января 2010

Извинения, если на этот вопрос уже был дан ответ. Есть похожие темы, но я не смог найти ни одного, касающегося Cocoa & NSStrings ...

Я создаю кликабельный URL-адрес, чтобы встроить его в электронное письмо в формате HTML, которое будет отправлено на iPhone через MFMailComposeViewController. я создаю URL, затем использую stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding, чтобы очистить пробелы и т. д., затем добавлю немного окружающего HTML, чтобы получить:

<a href = "http://www.site.com/viewitem?name=Johnny%20Rotten&age=53&mate=sid%20vicious">view</a>

Все хорошо, поэтому добавлено в emailBody. Однако как только [mailComposer setMessageBody:emailBody isHTML:YES] все & становятся &amp;, что не идеально в моем URL.

Могу ли я контролировать это? Есть ли лучший алгоритм кодирования? мой HTML немного ржавый, возможно, я использую неправильную кодировку? Я уверен, что на сервере я мог бы разобрать &amp; обратно в &, но в поисках пути Какао ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 января 2010

На самом деле & всегда должно быть закодировано как &amp; в атрибутах HTML. Включая ссылки. Включая разделители значений формы. Так что это сделано именно то, что вы хотите, даже если вы не знали, что хотели этого.

Посмотрите на это так: в вашем URL у вас есть &age=53... Сначала он интерпретируется как символьная сущность, и только после этого он интерпретируется как амперсанд, за которым следует больше символьных данных.

Спецификация W3C совершенно ясна в этом:

Авторам следует использовать "&amp;" (десятичное число ASCII 38) вместо "&", чтобы избежать путаницы с началом ссылки на символ (открытый разделитель ссылки на объект). Авторам также следует использовать «&amp;» в значениях атрибутов, поскольку в значениях атрибутов CDATA допускаются ссылки на символы.

Это должно решить: используйте &amp;, а не &.

0 голосов
/ 21 января 2010

Вы звоните MFMailComposeViewController's

setMessageBody:isHTML:

и что вы устанавливаете isHTML на?

В зависимости от настроек вполне может оказаться, что MFMailComposeViewController пытается помочь вам кодировать весь текст сообщения ...

Либо не кодируйте тело самостоятельно, ни создавайте все тело HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...