2015-02-10 49 views
0

我有一個C文件,它會生成一個html腳本。 的sprintf(buf中, 「{文本:\\」 %S(%S)\\」,VAR1,VAR2)如何防止變量中的特殊字符導致html錯誤

和問題是,VAR2就像=試驗> 1 這是所困惑的字符串。作爲腳本中某些其他開口角支架的右括號

我想要這樣的數據,但我想知道是否有可能通過某些轉義字符或某物來避免此問題

+0

如果我已經正確理解您的問題,您需要在'HTML'語法中挖掘更多。從'c'的角度來看,沒有問題,正如你所說的。 – 2015-02-10 07:32:58

回答

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; 
0

如果您在HTML文件中使用小於或大於符號更大(特殊字符),那麼它會用他們的標籤混合。所以在你的情況下,嘗試使用html實體名稱來使用特殊字符來生成你的html文件。
僅供參考:http://www.w3schools.com/html/html_entities.asp

相關問題