WEB언어/PHP

(PHP) HTML tag 제거 + 특정 HTML tag 허가(Allow)

saltdoll 2016. 2. 12. 02:54
반응형

[ 특정 HTML 제거 ]

특정 HTML 태그들이 간혹 문제를 일으킬 때가 있다.

예를 들어, "<form .. ></form>태그와 같은 경우 특히 문제를 발생 시키는 경우가 많다.


RegEx 을 통한 제거를 해주시면 됩니다.

$html = 'Approval form <form action="test.php">test</form> tag Remove<br />

(NEW LINE) carriage return line feed';


//$pattern = "/<form(.*?)<\/form>/i";

//$pattern = "/<form(.*?)<\/form>/is";

$pattern = "/<form[^>]+\>/i";

$pattern2 = "/<\/form>/i";

$html = preg_replace($pattern,"",$html);

$html = preg_replace($pattern2,"",$html);


print "$html\n";


결과:

Approval form test  tag Remove<br />
(NEW LINE) carriage return line feed



참고: Using PHP to Remove an HTML Tag from a String 



[ 특정 HTML 허용 ]

특정 HTML 태그만 허용해 줄때.

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment"><span style="color:red">Other text</span></a>';

echo strip_tags($text);

echo "\n";


// Allow <p> and <a>

echo strip_tags($text, '<p><a>');


결과:

Test paragraph. Other text

<p>Test paragraph.</p> <a href="#fragment">Other text</a>




[ MS Office XSL 태그 삭제 ]

word와 같은 내용을 Editor(SmartEditor, Tiny등)에 내용을 붙여 넣기를 한다면, 다음과 같이 발생합니다.

문자열이 클립보드에 담기게 됩니다.

<o:OfficeDocumentSettings>

  <o:AllowPNG/>

 </o:OfficeDocumentSettings>

</xml><![endif]--></p><p><!--[if gte mso 9]><xml>

 <w:WordDocument>

  <w:View>Normal</w:View>

  <w:Zoom>0</w:Zoom>

  <w:TrackMoves/>

  <w:TrackFormatting/>

  <w:PunctuationKerning/>

  <w:ValidateAgainstSchemas/>

  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>

  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>

  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>

  <w:DoNotPromoteQF/>

  <w:LidThemeOther>EN-US</w:LidThemeOther>

  <w:LidThemeAsian>KO</w:LidThemeAsian>

  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>

  <w:Compatibility>

   <w:BreakWrappedTables/>

   <w:SnapToGridInCell/>

   <w:WrapTextWithPunct/>

   <w:UseAsianBreakRules/>

   <w:DontGrowAutofit/>


(PHP) 해당 내용을 삭제하기

// (Feb 2016 Daniel) Approval form <form></form> tag Remove,  (April 2016 Daniel) Office XSL tag Remove

$removeArr = array("/<form[^>]+\>/i", "/<\/form>/i", "/<m:[^>]+\>/i", "/<\/m:[^>]+\>/i", "/<o:[^>]+\>/i", "/<\/o:[^>]+\>/i", "/<w:[^>]+\>/i", "/<\/w:[^>]+\>/i", "/<xml[^>]+\>/i", "/<\/xml>/i");


foreach ($removeArr as $str) {

$p_CONTENTS = preg_replace($str,"",$p_CONTENTS);

}



특정 테그 삭제

HTML Purifier?will create standards compliant markup and filter out many possible attacks (such as XSS).

For faster cleanups that don't require XSS filtering, I use the PECL extension?Tidy?which is a binding for the?Tidy HTML?utility.

If those don't help you, I suggest you switch to FCKEditor which has this feature?built-in.


참고: PHP to clean-up pasted Microsoft input  (Stackoverflow.com)


참고2: filtering MS  HTML - PHP Labware Interernal utilites : htmlLawed


반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)