2009-11-30 3 views
0

일부 HTML 코드 단편을 구문 분석하려고 시도하고 있으며 다양한 이유 (XSS 외)로 정리하려고합니다.eregi_replace를 preg_replace로 변환

현재 앵커의 href를 제외한 모든 태그의 모든 속성을 제거하려고합니다. eregi_replace 호출 시퀀스를 사용하여이 작업을 수행하고 있지만 preg_replace와 몇 줄의 코드를 사용하여 더 똑똑한 방법이 있다고 확신하지만이 코드를 작동시키지 못했습니다. 누구든지 도와 줄 수 있습니까?

현재 코드 :

$data_item = eregi_replace("<p[^>]*>","<p>", $data_item); 
$data_item = eregi_replace("<h2[^>]*>","<h2>", $data_item); 
$data_item = eregi_replace("<h3[^>]*>","<h3>", $data_item); 
$data_item = eregi_replace("<h4[^>]*>","<h4>", $data_item); 
$data_item = eregi_replace("<h5[^>]*>","<h5>", $data_item); 
$data_item = eregi_replace("<h6[^>]*>","<h6>", $data_item); 
$data_item = eregi_replace("<ul[^>]*>","<ul>", $data_item); 
$data_item = eregi_replace("<ol[^>]*>","<ol>", $data_item); 
$data_item = eregi_replace("<li[^>]*>","<li>", $data_item); 

$data_item = preg_replace("/<a([^>]*)(href=\S+)([^>]*)>/i", '<a$2 rel="nofollow">', $data_item); 

가 (난 단지 이전에 내가 어떤 undesireables을 제거 이것으로 HTML 태그의 하위 집합을 구문 분석 할 필요가있다).

답변

3

어떤 태그와도 일치하는 일반 정규식을 사용하고 preg_replace_callback()을 사용하면 주어진 태그를 대체해야하는 항목을 결정할 수 있습니다. 그렇게하면 일치하는 태그가 a 태그인지 확인하는 간단한 함수를 사용할 수 있습니다. 그렇다면 href를 바꾸지 말고 모든 태그를 바꿉니다.

또한,이 같은 것을 할 수있는 : 정규식의 () 그룹이 일치하는 태그의 유형을 캡처

$data_item = preg_replace("/<(p|h2|h3|h4|h5|h6|ul|ol)[^>]*>/i","<$1>", $dataitem); 

을의 |이 (가) "또는"운영자가 표시된 태그와 일치하는 것입니다, 대체 텍스트에있는 $1은 패턴의 첫 번째 (및 유일한) 캡처 그룹과 일치하는 것을 대체하는 데 사용됩니다.