2011-08-28 3 views
4

내가 ×있는 DOMDocument와 HTML 엔티티

$str = '<a href="http://example.com/"> A &#215; B</a>'; 

$dom = new DomDocument; 
$dom -> substituteEntities = false; 
$dom ->loadHTML($str); 

$link = $dom ->getElementsByTagName('a') -> item(0); 
$fullname = $link -> nodeValue; 
$href = $link -> getAttribute('href'); 

echo " 
fullname: $fullname \n 
href: $href\n";  

같은 일부 HTML 엔티티를 포함 일부 HTML을 구문 분석을 시도하고 있지만 DOMDocument를이 Ã - B.

에 대한 텍스트를 대체 어떤 방법이 있나요 html 엔티티에 대해 &을 사용하지 않고 그냥 그대로 둡니다. substituteEntities를 false로 설정하려고했지만 아무 것도하지 않습니다.

+0

왜 지키고 싶습니까? – Gordon

+0

나는 단지 * 정렬하고 싶다. 내가 실제로하고 싶은 것은 x로 바꾸고 싶다. 왜냐하면 나는 스크래퍼로부터의 오래된 코드와 같은 형식으로 텍스트를 넣을 것이기 때문에, 나는 절대적으로 아무 것도 가지고 있지 않다. 내가 정규식에서 그 기호를 포함하는 것에 대해 어떻게 생각하는지 궁금하다. – rafa

답변

1

&을 &amp;으로 대체 하시겠습니까? 이 경우 텍스트와 같은 정확한 항목을 볼 수 있지만 잘못된 응답은 아닙니다.

내 생각에 실제 문자로 변환되며이 문자가 포함되어 있지 않은 latin1 문자 세트로 페이지를보고 있으므로 잘못된 응답이 표시됩니다. 나는 당신의 예를 렌더링하는 경우

, 내 출력은 다음과 같습니다

fullname: A × B 

href: http://example.com/ 

라틴/ISO-8859-1 이것을보고, 나는 당신이 설명하고있는 출력을 참조하십시오. 그러나 charset을 UTF-8로 설정하면 출력이 정상입니다.

+0

코드에서 그 응답을 복사했기 때문에 이상하다. 어쨌든 utf8_encode와 decode를 사용하여 트릭을 만들었습니다. 감사합니다. – rafa

+0

브라우저에서 응답을 보는 경우 자동으로 문자 세트를 확인하려고 시도합니다. 따라서 실제 출력을 보려면 페이지 소스를 보는 것이 좋습니다. –

+0

그래, 내가 크롬으로 페이지 소스를보고, 내가 붙여 넣은 것을 가지고 있다는 것을 의미했다. – rafa

3

이 질문에 대한 직접적인 대답은 아니지만 직접 ÷ 또는 x와 같은 글리프를 저장할 수있는 UTF-8을 사용할 수 있습니다. PHP DOM과 함께 UTF-8을 사용하려면 a little hack이 필요합니다.

또한 수식을 표시하려는 경우 (A × B가 제안하는 것처럼) MathML을보십시오.

+0

감사합니다. buit 그들은 방정식이 아닙니다. – rafa

+0

해킹에 감사드립니다. 모든 UTF-8 엔티티 여전히 HTML 것들에 의해 대체됩니다 ...).지금 2013 년입니다. UTF-8을 제대로 처리하려면 트릭을 사용해야합니다 :-( – Damien

4
워드 프로세서

:

에서 DOM 확장은 UTF-8 인코딩을 사용한다.
utf8_encode() 및 utf8_decode()를 사용하여 ISO-8859-1 인코딩의 텍스트 또는 다른 인코딩의 Iconv로 작업하십시오. 예를 &#x03A3;에 대한 사실, utf8_encode 및 deccode은 어떤 경우에 대한 트릭하지만 그들 모두를 수행

<?php 
header('Content-type:text/html;charset=iso-8859-1'); 


$str = utf8_encode('<a href="http://example.com/"> A &#215; B</a>'); 

$dom = new DOMDocument; 


$dom -> substituteEntities = false; 
$dom ->loadHTML($str); 

$link = $dom ->getElementsByTagName('a') -> item(0); 
$fullname = utf8_decode($link -> nodeValue); 
$href = $link -> getAttribute('href'); 

echo " 
fullname: $fullname \n 
href: $href\n"; ?> 
+0

utf8_encode 및 디코드를 사용하여 주저했지만 덕분에 사용 된 나머지는 모두 읽으겠습니다. – rafa

+0

Btw, i used 역순으로 - 내 초기 데이터가 이미 인코딩되었으므로 잘 작동했습니다. 감사합니다. –

0

저도 같은 문제에 직면하고있다 : 당신을 가정

라틴-1 시도를 사용하는 는 utf-8 디코드 함수를 사용하여 렌더링 할 수 없습니다. 우리가 필요로하는 기본적인 아이디어는 html 엔티티를 문자열에 그대로 유지하는 것입니다.

+2

답변은 코멘트 여야합니다. 이것은 실제로 포럼이 아닙니다. – Oz123

관련 문제