Как отправить XML в качестве тела письма из нативного приложения для iPhone? - PullRequest
0 голосов
/ 11 июня 2009

Я пишу приложение, которое в конечном итоге хочет отправить XML по электронной почте.

Я подозреваю, что есть mailto / URL, благодаря различным ссылкам в сети, включая Brandon и Simon Maddox .

Поэтому я могу отправлять электронные письма в формате xml, отформатированном с использованием квадратных скобок ([]), а не обычных угловых скобок (<>). Но когда я отправляю угловые скобки, когда XML искажен с использованием вызова stringByAddingPercentEscapesUsingEncoding, он обрабатывает его как HTML и просто печатает значения.

Если изменить их на "& lt;" и "& gt;" тогда он полностью удаляет XML ... (я знаю, что после & - не должно быть пробела, но форматировщик SO превращает их в <,> ...)

Я попытался добавить немного HTML вперед, чтобы посмотреть, помогло ли это, но безрезультатно.

Я не думаю, что кто-то сделал это?

Возможно, электронная почта в приложении - это легкий путь для меня ... надо разобраться в этом.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 июня 2009

Следующий код работал для меня ... У меня есть данные SIP-сообщения, содержащие <>, которые необходимо экранировать.

/* remember to call urlEscapeStringDone to free the malloced string.. */
char *urlEscapeString(char *str)
{
    int i, l;
    char *escStr;

    escStr = malloc(strlen(str)*3 + 1);
    if(!escStr) return NULL;

    memset(escStr, 0, strlen(str)*3);

    l = strlen(escStr);
    for(i = 0; i < strlen(str); i++)
    {
        char c = str[i];

        /* < and > handling for HTML interpreters.. (apple mail) */
        if(c == '<')
        {
            strcat(escStr, "%26lt%3b");
            l += 8;
        }
        else if(c == '>')
        {
            strcat(escStr, "%26gt%3b");
            l += 8;
        }
        else if(must_escape(c))
        {
            char tmp[3];

            sprintf(tmp, "%02x", (unsigned) c);
            escStr[l] = '%'; l++;
            escStr[l] = tmp[0]; l++;
            escStr[l] = tmp[1]; l++;
        }
        else
        {
            escStr[l] = str[i];
            l++;
        }
    }

    printf("escaped: %s\n", escStr);

    return escStr;
}

void urlEscapeStringDone(char *str)
{
    if(str) free(str);
}

int must_escape(char c)
{
    char *allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._";

    if(!strchr(allowedChars, c)) return 1;
    return 0;
}
1 голос
/ 11 июня 2009

Пытались ли вы заменить все символы «<» и «>» на «& lt» и «& gt» после того, как обернули их в основные заголовки HTML?

Насколько я понимаю, это обычный метод отображения XML на веб-странице.

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