expat xml 파서를 이용해서 xml을 구조화시키는(간단하게 탭정렬) 것을 하다보니, data 부분에서 파싱에러가 발생한다.
URL 등에서 &가 & 로 변환되지 않았다고
"세미콜론이(;)이 와야 합니다." 라는 문법오류가 발생한다.
아무튼 expat의 기본샘플 프로그램(?)인
xmlwf.c의 내용을 보니 별도로 이러한 특수문자를 처리하는 함수가 있었다.
static void XMLCALL
characterData(void *userData, const XML_Char *s, int len)
{
FILE *fp = (FILE *)userData;
for (; len > 0; --len, ++s) {
switch (*s) {
case T('&'):
fputts(T("&"), fp);
break;
case T('<'):
fputts(T("<"), fp);
break;
case T('>'):
fputts(T(">"), fp);
break;
#ifdef W3C14N
case 13:
fputts(T("
"), fp);
break;
#else
case T('"'):
fputts(T("""), fp);
break;
case 9:
case 10:
case 13:
ftprintf(fp, T("&#%d;"), *s);
break;
#endif
default:
puttc(*s, fp);
break;
}
}
}
아무튼, 많이 보던 녀석인데 도대체 어떤 표준인지 알수가 없는데,
검색하다 보니 iso8859-1 인것 같기도 하고.. 구분이 모호하다.
아무튼, XHTML/HTML에서 사용되는 방식인듯 하다.
Reserved Characters in HTML
Some characters are reserved in HTML and XHTML. For example, you
cannot use
the greater than or less than signs within your text because the browser
could
mistake them for markup.
HTML and XHTML processors must support the five special characters
listed in
the table below:
Character |
Entity Number |
Entity Name |
Description |
" |
" |
" |
quotation mark |
' |
' |
' (does not work in IE) |
apostrophe |
& |
& |
& |
ampersand |
< |
< |
< |
less-than |
> |
> |
> |
greater-than |
Note: Entity names are case sensitive!
[링크 : http://www.w3schools.com/tags/ref_entities.asp] |
[링크 :
http://microweb.textcube.com/31]