⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htescape.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
字号:
/*								     HTEscape.c**	ESCAPE AND UNESACPE ILLEGAL CHARACTERS IN A URI****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTEscape.c,v 2.21 1999/02/22 22:10:11 frystyk Exp $**** history:**	Nov 13 94	Spawned from HTParse, as it then can be used in utility**			programs without loading the whole library*//* Library include files */#include "wwwsys.h"#include "HTUtils.h"#include "HTEscape.h"					 /* Implemented here */#define HEX_ESCAPE '%'#define ACCEPTABLE(a)	( a>=32 && a<128 && ((isAcceptable[a-32]) & mask))/***  Not BOTH static AND const at the same time in gcc :-(, Henrik 18/03-94 **  code gen error in gcc when making random access to static const table(!!)*//***	Bit 0		xalpha		-- see HTFile.h**	Bit 1		xpalpha		-- as xalpha but with plus.**	Bit 2 ...	path		-- as xpalpha but with /*/PRIVATE unsigned char isAcceptable[96] ={/* 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF */    0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xF,0xE,0x0,0xF,0xF,0xC, /* 2x  !"#$%&'()*+,-./   */    0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x8,0x0,0x0,0x0,0x0,0x0, /* 3x 0123456789:;<=>?   */    0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF, /* 4x @ABCDEFGHIJKLMNO   */    0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x0,0x0,0x0,0x0,0xF, /* 5X PQRSTUVWXYZ[\]^_   */    0x0,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF, /* 6x `abcdefghijklmno   */    0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x0,0x0,0x0,0x0,0x0  /* 7X pqrstuvwxyz{\}~DEL */};PRIVATE char *hex = "0123456789ABCDEF";/* ------------------------------------------------------------------------- *//*		Escape undesirable characters using %		HTEscape()**		-------------------------------------****	This function takes a pointer to a string in which**	some characters may be unacceptable unescaped.**	It returns a string which has these characters**	represented by a '%' character followed by two hex digits.****	In the tradition of being conservative in what you do and liberal**	in what you accept, we encode some characters which in fact are**	allowed in URLs unencoded -- so DON'T use the table below for**	parsing! ****	Unlike HTUnEscape(), this routine returns a HT_MALLOCed string.***/PUBLIC char * HTEscape (const char * str, HTURIEncoding mask){    const char * p;    char * q;    char * result;    int unacceptable = 0;    if (!str) return NULL;    for(p=str; *p; p++)        if (!ACCEPTABLE((unsigned char)TOASCII(*p)))		unacceptable++;    if ((result = (char  *) HT_MALLOC(p-str + unacceptable+ unacceptable + 1)) == NULL)        HT_OUTOFMEM("HTEscape");    for(q=result, p=str; *p; p++) {    	unsigned char a = TOASCII(*p);	if (!ACCEPTABLE(a)) {	    *q++ = HEX_ESCAPE;	/* Means hex commming */	    *q++ = hex[a >> 4];	    *q++ = hex[a & 15];	}	else *q++ = *p;    }    *q++ = 0;			/* Terminate */    return result;}PUBLIC char HTAsciiHexToChar (char c){    return  c >= '0' && c <= '9' ?  c - '0'     	    : c >= 'A' && c <= 'F'? c - 'A' + 10    	    : c - 'a' + 10;	/* accept small letters just in case */}/*		Decode %xx escaped characters			HTUnEscape()**		-----------------------------****	This function takes a pointer to a string in which some**	characters may have been encoded in %xy form, where xy is**	the acsii hex code for character 16x+y.**	The string is converted in place, as it will never grow.*/PUBLIC char * HTUnEscape (char * str){    char * p = str;    char * q = str;    if (!str) {					      /* Just for safety ;-) */	HTTRACE(URI_TRACE, "HTUnEscape.. Called with NULL argument.\n");	return NULL;    }    while(*p) {        if (*p == HEX_ESCAPE) {	    p++;	    if (*p) *q = HTAsciiHexToChar(*p++) * 16;#if 1	    /* Suggestion from Markku Savela */	    if (*p) *q = FROMASCII(*q + HTAsciiHexToChar(*p)), ++p;	    q++;#else 	    if (*p) *q = FROMASCII(*q + HTAsciiHexToChar(*p));	    p++, q++;#endif	} else {	    *q++ = *p++; 	}    }        *q++ = 0;    return str;    } /* HTUnEscape */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -