我有一個C文件,它會生成一個html腳本。 的sprintf(buf中, 「{文本:\\」 %S(%S)\\」,VAR1,VAR2)如何防止變量中的特殊字符導致html錯誤
和問題是,VAR2就像=試驗> 1 這是所困惑的字符串。作爲腳本中某些其他開口角支架的右括號
我想要這樣的數據,但我想知道是否有可能通過某些轉義字符或某物來避免此問題
我有一個C文件,它會生成一個html腳本。 的sprintf(buf中, 「{文本:\\」 %S(%S)\\」,VAR1,VAR2)如何防止變量中的特殊字符導致html錯誤
和問題是,VAR2就像=試驗> 1 這是所困惑的字符串。作爲腳本中某些其他開口角支架的右括號
我想要這樣的數據,但我想知道是否有可能通過某些轉義字符或某物來避免此問題
只需用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 &"<>
如果您在HTML文件中使用小於或大於符號更大(特殊字符),那麼它會用他們的標籤混合。所以在你的情況下,嘗試使用html實體名稱來使用特殊字符來生成你的html文件。
僅供參考:http://www.w3schools.com/html/html_entities.asp
如果我已經正確理解您的問題,您需要在'HTML'語法中挖掘更多。從'c'的角度來看,沒有問題,正如你所說的。 – 2015-02-10 07:32:58