如何防止变量中的特殊字符导致html错误

时间:2015-02-10 07:17:07

标签: html c

我有一个生成html脚本的C文件。 sprintf(buf,“{text:\\”%s(%s)\\“,var1,var2)

问题是var2是一个像= test> 1的字符串。 这被混淆为脚本中其他一些开口角括号的右括号。

我想要这样的数据。但我想知道是否可以借助一些转义字符或其他东西来避免这个问题。

2 个答案:

答案 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, "&#38;", 5); p += 5; break;
            case '"': memcpy(p, "&#34;", 5); p += 5; break;
            case '<': memcpy(p, "&#60;", 5); p += 5; break;
            case '>': memcpy(p, "&#62;", 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 &#38;&#34;&#60;&#62;

答案 1 :(得分:0)

如果你在html文件中使用小于或大于符号(特殊字符),那么它会将它们与标签混合在一起。因此,在您的情况下,尝试使用html实体名称来使用特殊字符来生成您的html文件 如需参考,请访问:http://www.w3schools.com/html/html_entities.asp