我想到目前爲止,我已經得到了一些代碼,試圖對其進行解碼解碼HTML實體(格式'
)的C.如何在C中轉義html實體?
,但它似乎產生奇數輸出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* convertHtmlEntities(char* str) {
size_t length = strlen(str);
size_t i;
char *endchar = malloc(sizeof(char));
long charCode;
if (!endchar) {
fprintf(stderr,"not enough memory");
exit(EXIT_FAILURE);
}
for (i=0;i<length;i++) {
if (*(str+i) == '&' && *(str+i+1) == '#' && *(str+i+2) >= '0' && *(str+i+2) <= '9' && *(str+i+3) >= '0' && *(str+i+3) <= '9' && *(str+i+4) == ';') {
charCode = strtol(str+i+2,&endchar,0);
printf("ascii %li\n",charCode);
*(str+i) = charCode;
strncpy(str+i+1,str+i+5,length - (i+5));
*(str + length - 5) = 0; /* null terminate string */
}
}
return str;
}
int main()
{
char string[] = "Helloworld's parent company has changed - comF";
printf("%s",convertHtmlEntities(&string));
}
我不知道如果主語句是正確的,因爲我做到了這個例子是我的程序從Web URL生成它,但這個想法是一樣的。
該函數替換'
用撇號,但輸出在最後,只是更換後是亂碼。
有沒有人有解決方案?
我認爲這是因爲您要用1個字符替換5個字符,您正在將尾隨字符移動到正確的位置,但您需要通過刪除的字符數來縮短字符串。 (刪除最後的那些) – 2011-03-11 11:15:24
我期望 - 但這不是發生了什麼.. 例如的 「HelloWorld '的母公司已經改變 - COMF」 變成了 「HelloWorld的parcompanypany已經改變 - COMF」 ??? – 2011-03-11 11:20:12
在主'&字符串'是'char **'; convertHtmlEntities()函數需要一個'char *'。你不應該使用'&':'printf(「%s」,convertHtmlEntities(string));'沒問題。 – pmg 2011-03-11 11:55:07