2010-05-18 3 views
1

나는 여기에서 새롭고 하루 종일 나를 속이는 질문을 받았다.PHP 5로 XML 번호가 매겨진 엔티티 얻기 DOM

나는 cURL을 통해 웹 사이트 소스 코드를 읽고 사이트 맵 파일을 생성하기 위해 DOMDocument 클래스와 작동하는 PHP 스크립트를 만들었습니다.

거의 모든면에서 매력처럼 작동합니다. 문제는 특수 문자입니다.

호환성을 위해 사이트 맵 파일에는 번호가 지정된 모든 엔티티로 인코딩 된 특수 문자가 모두 있어야합니다. 그리고 나는 그것을 성취하지 못하고있다. 예를 들어

, 내 항목 중 하나 - 자동으로 사이트 URL에서 읽고, 파일을 사이트 맵 쓴 -입니다 :

: 그것은해야 소스 코드에

http://www.somesite.com/serviços/redesign/

처럼 보이는 * http://www.somesite.com/servi ** ç ** os/redesign/*

바로이 부분입니다. 그러나 불행히도, 나는 그것을 실제로하는 방법을 알아 내고 있지 않습니다.

소스 코드 파일, 서버 헤더 등 ... 모든 것이 UTF-8로 인코딩됩니다.

DOMDocument 및 관련 확장을 사용하여 XML을 작성하고 있습니다. (기본적으로 DOMDocument, $ obj-> createElement, $ obj-> appendChild).

htmlentities는 & ccedil; 대신 ç str_replace가 작동하지 않습니다. 문자가 출력에서 ​​사라집니다.

$ obj-> createElement ("loc", $ url);을 (를) 사용하고있었습니다. 내 코드에서, 그리고 지금 막 엔티티 인코딩을 지원하기 위해 $ document-> createTextNode ($ page)를 사용해야한다는 PHP 매뉴얼을 읽었습니다.

음, 작동하지 않습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

감사합니다.

답변

1

: 사용하기 전에

$ URL = filter_var ($ URL이, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH)

을 그것. 이것은 내가 시도한 다른 솔루션보다 더 나은 결과를 만든다 (bcoz는 RFC를 준수한다).

1

를 htmlentities는 제 3 인수를 가지고 = 문자 집합을 사용하는 즉,

나는 필터 확장 사용
htmlentities($string,ENT_COMPAT,"UTF-8"); 
관련 문제