xhtml PHP Tidy - 완벽한 XHTML 오류 수정 필터링

WBOY
풀어 주다: 2016-07-29 08:36:55
원래의
876명이 탐색했습니다.

입력과 출력
입력과 출력은 많은 웹사이트의 기본 기능이라고 해야 할까요. 사용자는 데이터를 입력하고 웹사이트는 다른 사람들이 탐색할 수 있도록 데이터를 출력합니다.
현재 인기 있는 블로그를 예로 들면, 여기서 입력과 출력은 작성자가 기사를 편집하고 다른 사람들이 읽을 수 있도록 블로그 기사 페이지를 생성한다는 것입니다.
여기에는 문제가 있습니다. 즉, 사용자 입력은 일반적으로 제어되지 않으며 보안 위험이 있는 잘못된 형식이나 코드가 포함될 수 있지만 웹사이트의 최종 콘텐츠 출력은 올바른 HTML 코드여야 합니다. 이를 위해서는 오류 수정 및 사용자 입력 필터링이 필요합니다.
사용자 입력을 절대 믿지 마세요
다음과 같이 말할 수 있습니다. 지금은 어디에나 WYSIWYG 편집기가 있습니다. FCKeditor, TinyMCE... 이름을 많이 언급할 수 있습니다. 예, 모두 표준 XHTML 코드를 자동으로 생성할 수 있지만 웹 개발자라면 "사용자가 제출한 데이터를 절대 신뢰하지 마세요"라는 말을 들어봤을 것입니다.
따라서 사용자 입력 데이터를 수정하고 필터링하는 것이 필요합니다.
더 나은 오류 수정 및 필터링이 필요합니다
지금까지 제가 접한 구현은 일반적으로 비효율적이고 이상적이지 않으며 어떤 종류의 명백한 결함이 있습니다. . 잘 알려진 예를 들면, WordPress는 매우 널리 사용되는 블로그 시스템입니다. 작동이 간단하고 강력하며 풍부한 플러그인을 지원합니다. 그러나 통합된 TinyMCE와 다양한 영리한 오류 수정 및 필터링 코드가 백그라운드에 있습니다. , 반자 문자 강제 교체, 지나치게 보수적인 교체 규칙 등으로 인해 올바르게 표시하기 위해 코드 조각을 붙여넣어야 한다는 요구 사항을 충족하기가 어렵습니다.
그런데 이 블로그는 WordPress에서 호스팅하고 있으므로 이 기사가 코드를 올바르게 표시하도록 하기 위해 온라인에서 많이 검색하고 몇 가지 플러그인을 사용해 보았습니다. 그리고 일부 필터링 규칙을 주석 처리했습니다. 간신히 제대로 표시될 수 있습니다. -.-b
물론 (워드프레스)을 너무 비난하고 싶지는 않고, 더 잘할 수 있다는 것을 보여주고 싶을 뿐입니다.
Tidy란 무엇이며 어떻게 작동하나요?
Tidy ManPage에서 가져온 설명은 다음과 같습니다.
Tidy는 HTML, XHTML 및 XML 파일을 읽고 W3C 규격으로 정리된 마크업을 작성하며 대부분의 브라우저에서 작동합니다. XHTML. 일반적인 XML 파일의 경우 Tidy는 기본적인 형식 오류 수정과 예쁜 인쇄에만 국한됩니다.
간단히 말해서 Tidy는 HTML 코드를 정리하고 W3C 표준을 준수하며 HTML, XHTML을 지원하는 깨끗한 HTML 코드를 생성하는 것입니다. 및 XML. Tidy는 다른 애플리케이션에서 Tidy의 강력한 기능을 쉽게 사용할 수 있도록 TidyLib 라이브러리를 제공합니다. 다행스럽게도 PHP에는 사용할 수 있는 tidy 모듈이 있습니다.
야, 왜 또 PHP야?
어, 이 질문... 부끄럽습니다. 저는 PHP -.-v에 대해 조금밖에 알지 못하기 때문입니다
다행히도 제가 여기서 말하는 것은 무엇입니까? 는 순수한 코드가 아닙니다. 적어도 일부 분석 프로세스가 있으므로 이러한 내용을 공유하는 것이 코드를 게시하는 것보다 훨씬 더 유용합니다.
PHP에서 Tidy 사용
PHP에서 Tidy를 사용하려면 Tidy 모듈을 설치해야 합니다. 이는 PHP 확장 tidy.so를 로드하는 것을 의미합니다. 특정 프로세스는 생략되며 순전히 물리적인 작업입니다. 마지막으로 phpinfo()에 "Tidy supportenabled"가 표시되면 괜찮습니다.
이 모듈의 지원으로 Tidy에서 제공하는 거의 모든 기능을 PHP에서 사용할 수 있습니다. 일반적으로 사용되는 HTML 정리는 매우 쉽습니다. 문서의 구문 분석 트리를 생성하고 클라이언트에서 DOM을 작동하는 것처럼 HTML의 각 노드를 작동할 수도 있습니다. 아래에 구체적인 코드 지침이 있으며 공식 PHP 매뉴얼을 볼 수도 있습니다.
오류 수정 및 필터링의 PHP Tidy 구현
위에서 언급한 너무 많은 배경 자료는 너무 혼란스러워 보이지만 문제를 해결하기 위한 구체적인 코드가 가장 직접적입니다.
1. 간단한 오류 수정 구현
function HtmlFix($html)
{
if(!function_exists('tidy_repair_string'))
return $html> //tidy를 사용합니다. html 코드 복구
//복구
$str = tidy_repair_string($html,
array('output-xhtml'=>true),
'utf8') // 구문 분석
$str = tidy_parse_string($str,
array('output-xhtml'=>true),
'utf8')
$s =
$ 노드 = @ tidy_get_body($str)->child;
if(!is_array($nodes)){
$returnVal = 0
return $s
}
foreach($ 노드 $n){
$s .= $n->value;
}
return $s;
}
위 코드는 표준화되지 않은 XHTML 코드를 처리하기 위한 것입니다. 오류를 정리 및 수정하고 표준 XHTML 코드를 출력합니다(입력 및 출력 모두 UTF-8로 인코딩됨). 구현 코드가 가장 간결하지는 않습니다. 아래 필터링 기능과 연동하기 위해 최대한 자세하게 작성했기 때문입니다.
2. 고급 구현: 오류 수정 및 필터링
기능:
XHTML 오류 수정, 표준 XHTML 코드 출력.
안전하지 않은 코드를 필터링하지만 콘텐츠 표시에는 영향을 주지 않습니다. 스타일/자바스크립트에서 안전하지 않은 코드만 지웁니다.
브라우저 호환 자동 줄 바꿈을 구현하려면 매우 긴 문자열에 태그를 삽입하세요. 관련 기사는 웹 페이지에서 매우 긴 텍스트의 줄바꿈 ​​문제를 참조하세요.
function HtmlFixSafe($html)
{
if(!function_exists('tidy_repair_string'))
return $html
//tidy를 사용하여 html 코드 복구
// tidy 매개변수 설정
$conf = array(
                                                                                             >                                  print - , , , '=> ;TRUE
,'show-body-only'=>TRUE

//수리
$str = tidy_repair_string($html,$conf,'utf8');
//파싱 트리 생성
$str = tidy_parse_string($str,$conf,'utf8')
$s ='';
//본문 노드 가져오기
$body = @tidy_get_body( $str)
//_dumpnode 함수, 각 노드 확인, 필터링 및 출력
function _dumpnode($node,& $s){
//노드 이름이

인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!