2009-09-12 2 views
0

가능한 중복은 :
How to decode HTML Entities in C?HTML 엔티티를 c의 유니 코드 (utf-8) 문자열로 변환 하시겠습니까?

이 질문은 that one 매우 유사하지만, C에서 같은 일을 Python을 필요가 없습니다.

input output 

&lt;  < 
&gt;  > 
&auml; ä 
&#x00DF; ß 

기능은 서명 숯불 * html2str (숯불 *의 HTML) 또는 이와 유사한이 있어야합니다 여기 함수가해야 할 일의 일부 예입니다. 스트림에서 1 바이트 씩 읽지 않습니다.

사용할 수있는 라이브러리 기능이 있습니까?

+0

구체적으로 작성하십시오. html을 한 문자열로 사용합니까, 아니면 스트림에서 하나씩 읽는 중입니까? – qrdl

답변

0

이 말은 flex의 직업과 같습니다. 물론 Flex는 스트림 기반이지만 flex 함수 yy_scan_string (또는 그 친척)을 사용하여 변경할 수 있습니다. 자세한 내용은 The flex Manual: Scanning Strings을 참조하십시오.

Flex의 기본 유니 코드 지원은 매우 좋지 않지만 바이트 단위로 직접 코딩하는 데 신경 쓰지 않는다면 해결 방법이 될 수 있습니다. 아마도 당신이 원하는 것을 할 수있는 다른 도구들이있을 것입니다.

2

작업을 수행하는 표준 라이브러리 기능이 없습니다. 오픈 소스 세계에서 구현 가능한 많은 수의 구현이 있어야합니다. HTML을 처리해야하는 프로그램의 경우에는 하나가 있어야합니다. 소스 문자열의 HTML 엔티티를 찾기

  1. :

    은이 개 문제에 대한 측면이 있습니다.

  2. 해당 대체 텍스트를 해당 위치에 삽입하십시오.

가능한 가장 짧은 엔티티는 '& x;'입니다. (그러나 AFAIK, 그들은 모두 앰퍼샌드와 세미콜론 사이에서 최소한 2 문자를 사용합니다) 가능한 가장 긴 UTF-8 문자 표현이 4 바이트이기 때문에 항상 문자열을 줄입니다. 따라서 현장에서 안전하게 편집 할 수 있습니다.

Kernighan과 Pike가 'The Practice of Programming'에 HTML 엔터티를 디코딩 한 그림이 있지만 '통과 중'인 경우 다소 있습니다. 이들은 토큰 화기를 사용하여 엔티티를 인식하고 엔티티 이름과 대체 값의 정렬 된 테이블을 사용하여 이진 검색을 사용하여 대체를 식별 할 수 있습니다. 이것은 알고리즘이 아닌 엔티티 이름에만 필요합니다. '& # x00DF;'로 인코딩 된 엔티티의 경우 알고리즘 기법을 사용하여 디코딩합니다.

관련 문제