我正在编写一个最终希望通过电子邮件发送XML的应用程序。
由于互联网上的各种链接,包括Brandon和Simon Maddox,我有mailto / URL事件。
所以我可以发送带有方括号([])格式的xml的电子邮件,而不是通常的尖括号(<>)。但是当我发送尖括号时,使用stringByAddingPercentEscapesUsingEncoding调用XML格式,它将其视为HTML并只打印值。
如果将它们更改为“& lt;”和“& gt;”然后它完全剥离了XML ...(我知道在& - 之后不应该有空格 - 但是SO格式化程序将它们变成<,> ...)
我尝试在前面添加一些HTML,看看是否有帮助,但无济于事。
我不认为有人这样做过吗?
也许应用程序内的电子邮件是我走的简单路线......必须深入研究。
提前致谢。
答案 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;
}