如何从本机iPhone应用程序发送XML作为电子邮件正文?

时间:2009-06-10 20:43:06

标签: iphone objective-c

我正在编写一个最终希望通过电子邮件发送XML的应用程序。

由于互联网上的各种链接,包括BrandonSimon Maddox,我有mailto / URL事件。

所以我可以发送带有方括号([])格式的xml的电子邮件,而不是通常的尖括号(<>)。但是当我发送尖括号时,使用stringByAddingPercentEscapesUsingEncoding调用XML格式,它将其视为HTML并只打印值。

如果将它们更改为“& lt;”和“& gt;”然后它完全剥离了XML ...(我知道在& - 之后不应该有空格 - 但是SO格式化程序将它们变成<,> ...)

我尝试在前面添加一些HTML,看看是否有帮助,但无济于事。

我不认为有人这样做过吗?

也许应用程序内的电子邮件是我走的简单路线......必须深入研究。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您是否尝试更换所有'<'和'>'将它包装在基本HTML标题中后带有'& lt'和'& gt'的字符?

据我了解,这是在网页上显示XML的常用技巧。

答案 1 :(得分:1)

以下代码对我有用...我的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;
}