웹 문서의 스트링을 처리하다 보면 종종 &#OOOO; 형태의 문자가 튀어나오는 것을 볼 수 있다.
대부분의 경우 별 생각 없이 htmlunescape() 류의 함수를 돌리면 정상적인 문자로 돌아오는데, 이 녀석을 조금 자세히 살펴보자.
정식 이름은 아마도 Numeric Character Reference 일텐데, OML 류의 마크업 언어에서 하나의 문자를 문자 시퀀스로 표현하는 방식을 말한다.
&#{코드포인트}; 로 표현하게 되는데, 예를 들면 일반적인 스페이스 문자 ' '(U+0020) 는
  (decimal)
  (hexadecimal)
  (hexadecimal)
  (hexadecimal)
로 표현하게 된다.
위의 어떤 방식으로 써도 코드포인트에 해당하는 문자로 표현되고, 예를 들어 한글 범위의 유니코드 포인트를 사용해보면 '&#ba02;' 는 '먂'(U+ba02) 이 된다.
HTML에서 흔히 사용하는 '<' '&rt;', '&' 같은 것은 위의 예 처럼 코드로 쓰면 헷갈리니까 주로 사용하는 몇 가지에 별칭을 준 것이다.(Character Entity Reference)
말 나온 김에 를 좀 살펴보자.
HTML의 경우 Character Entity Reference는 https://www.w3.org/TR/html4/sgml/entities.html 에 정의되어 있는데, HTML에서 공백 문자를 표현하기 위해 사용하는 를 보면 U+0020 이 아니라 U+00A0 으로 정의되어 있다.
U+0020은 latin space, U+00A0은 Non-breaking Space 로 정의되어 있는데(그래서 NonBreakingSPace, NBSP), Non-breaking space는 자동 행바꿈을 방지하는 공백이다.
"line break" 는 "line" 과 "break" 사이에서 줄바꿈될 수 있지만 "line break"는 공간이 부족할 경우에 "line" 전에서 줄바꿈된다.
추가로 " " (공백 2개)는 HTML 브라우저에서 " "(공백 1개)로 축약되어서 보이지만 " " 는 축약되지 않고 공백 2칸으로 표현되기도 한다.
이 외에 Zero-width Space (U+200B) 처럼 자리를 차지하지는 않지만 line-break 가 가능한 위치를 지정해주는 문자(​)도 있고, Zero-width Non-joiner (U+200C), Zero-width No-break Space (U+FEFF) 처럼 쓸 일 없어 보이는 문자도 있으니 참고하자.
가끔 한글 Line-break나 Word-wrap 에 zero-width space 를 사용해야 할 때가 있다.
아참. 제목에 있는 … 은 말줄임표 "…" 다.
[reference]