HTML의 현대 방언과 올바른 규칙은 HTML 엔터티 (&likethat;
)의 세미콜론을 생략 할 수 없습니다. 하지만 임의의 페이지를 구문 분석하고 세미콜론없이 나쁜 HTML 엔터티를 처리해야하는 작업이 있습니다. 그리고 이것은 브라우저에 의해 완벽하게 표현됩니다. PHP로 세미콜론없이 각각의 UTF-8에 HTML 엔터티를 디코딩 할 수 있습니까?PHP에서 세미콜론없이 HTML 엔터티 디코드
2
A
답변
1
당신은 모든 HTML 엔티티의 목록을 자신의 UTF-8 표현으로 세미콜론없이 모두 교체 할 경우에 사용할 수 있습니다
// get all HTML entities
$mapping = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES | ENT_HTML5, 'UTF-8');
// change array values representing the entities to regex pattern with negativ lookahead for semicolon
array_walk($mapping, function(&$value) { $value = '/'.rtrim($value, ';').'(?!;)/'; });
// replace all entities without semicolon by their utf8 representation
$html = preg_replace(array_values($mapping), array_keys($mapping), $html);
0
내 생각 엔 DOMDocument::loadHTML을 사용하여 문서를로드하고 DOMDocument::saveHTML을 사용하여 문서를 저장해보십시오.
libxml constants을 사용하여 추가 옵션을 지정할 수 있습니다.
+0
이 그냥 모든'및''& 이러한 HTML 엔티티에서 '탈출 html-entites로 올바르게 가져 오는 대신 이 libxml 상수를 어떻게 사용해야합니까? 어떻게 도와 줄 수 있습니까? HTML은 XML이 아닙니다. 그렇습니까? – Gherman
http://it2.php.net/get-html-translation-table –
'& # 8211 [& # 8230]'과 같은 문자열이 있습니다. 왜이 답변이 효과가 없습니까? 'html_entity_decode'는 세미콜론이 있으면 작동합니다 : '– […]' – Shawn
get_html_translation_table()의 결과를 매핑 목록으로 사용하여 HTML 엔티티를 utf-8 표현으로 대체합니다. 이 함수는 & ü, & dollar ;, 등의 명명 된 html 엔티티 만 반환하지만 10 진수 표기법의 html 엔티티는 반환하지 않습니다. 그들은 매핑에 있지 않기 때문에 대체되지 않습니다. – SBH