我有一个生成html脚本的C文件。 sprintf(buf,“{text:\\”%s(%s)\\“,var1,var2)
问题是var2是一个像= test> 1的字符串。 这被混淆为脚本中其他一些开口角括号的右括号。
我想要这样的数据。但我想知道是否可以借助一些转义字符或其他东西来避免这个问题。
答案 0 :(得分:0)
只需用HTML实体替换这些特殊字符:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static size_t encode_len(const char *s)
{
size_t len = 0;
while (*s) {
if (*s == '&' || *s == '"' || *s == '<' || *s == '>') {
len += 5;
} else {
len += 1;
}
s++;
}
return len;
}
static char *encode(const char *s)
{
char *p = malloc(encode_len(s) + 1);
char *r = p;
if (p == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
while (*s) {
switch (*s) {
case '&': memcpy(p, "&", 5); p += 5; break;
case '"': memcpy(p, """, 5); p += 5; break;
case '<': memcpy(p, "<", 5); p += 5; break;
case '>': memcpy(p, ">", 5); p += 5; break;
default: *p++ = *s;
}
s++;
}
*p = '\0';
return r;
}
int main(void)
{
char *demo = "Text &\"<>";
char *result = encode(demo);
printf("%s = %s\n", demo, result);
free(result);
return 0;
}
输出:
Text &"<> = Text &"<>
答案 1 :(得分:0)
如果你在html文件中使用小于或大于符号(特殊字符),那么它会将它们与标签混合在一起。因此,在您的情况下,尝试使用html实体名称来使用特殊字符来生成您的html文件 如需参考,请访问:http://www.w3schools.com/html/html_entities.asp