在前端開(kāi)發(fā)中,我們經(jīng)常需要將一些數(shù)據(jù)以 JSON 格式傳輸?shù)胶蠖耍行?shù)據(jù)中可能會(huì)包含<, >等 HTML 標(biāo)簽,如果直接傳輸過(guò)去,可能會(huì)導(dǎo)致 HTML 解析錯(cuò)誤。為了避免這種情況,我們需要對(duì)特殊字符進(jìn)行轉(zhuǎn)義。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <cjson/cJSON.h> char *json_escape_html(const char *json_data) { cJSON *json = cJSON_Parse(json_data); if (!json) { cJSON_Delete(json); return NULL; } char *output = cJSON_Print(json); if (!output) { cJSON_Delete(json); return NULL; } cJSON_Delete(json); return output; } int main() { const char *json_data = "{\"name\": \"John\", \"age\": 20, \"message\": \"Hello, world!
\"}"; char *escaped_data = json_escape_html(json_data); printf("%s", escaped_data); free(escaped_data); return 0; }
以上代碼使用 cJSON 庫(kù)解析 JSON 數(shù)據(jù),并調(diào)用了一個(gè)自定義的函數(shù) json_escape_html 對(duì) HTML 標(biāo)簽進(jìn)行了轉(zhuǎn)義。具體實(shí)現(xiàn)方式是將 JSON 數(shù)據(jù)先解析成 cJSON 對(duì)象,再通過(guò) cJSON_Print 函數(shù)轉(zhuǎn)換為字符串,這個(gè)過(guò)程會(huì)自動(dòng)對(duì)特殊字符進(jìn)行轉(zhuǎn)義。最后釋放資源并返回轉(zhuǎn)義后的字符串。
通過(guò)這樣的方式,我們就可以將包含 HTML 標(biāo)簽的 JSON 數(shù)據(jù)安全地傳輸?shù)胶蠖耍苊獬霈F(xiàn)不必要的錯(cuò)誤。