IT Share you

HTML 특수 문자를 제거하는 방법?

shareyou 2021. 1. 9. 10:55
반응형

HTML 특수 문자를 제거하는 방법?


에서 수행하는 HTML 태그를 제거하려는 애플리케이션에 대한 RSS 피드 파일을 만들고 strip_tags있습니다. 그러나 strip_tagsHTML 특수 코드 문자를 제거하지 않습니다.

  & © 

기타

내 문자열에서 이러한 특수 코드 문자를 제거하는 데 사용할 수있는 함수를 알려주세요.


다음을 사용하여 디코딩하거나 다음을 사용하여 html_entity_decode제거하십시오 preg_replace.

$Content = preg_replace("/&#?[a-z0-9]+;/i","",$Content); 

( 여기에서 )

편집 : Jacco의 의견에 따른 대안

'+'를 {2,8} 등으로 바꾸면 좋을 것입니다. 이렇게하면 인코딩되지 않은 '&'가있을 때 전체 문장을 바꿀 가능성이 제한됩니다.

$Content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$Content); 

html_entity_decodeHTML 엔티티를 변환하는 데 사용 합니다.

올바르게 작동하려면 charset을 설정해야합니다.


위의 좋은 답변 외에도 PHP에는 매우 유용한 내장 필터 기능인 filter-var가 있습니다.

HMTL 문자를 제거하려면 다음을 사용하십시오.

$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);

더 많은 정보:

  1. function.filter-var
  2. filter_sanitize_string

여기 에서 htmlentities () 및 html_entity_decode ()를 살펴볼 수 있습니다.

$orig = "I'll \"walk\" the <b>dog</b> now";

$a = htmlentities($orig);

$b = html_entity_decode($a);

echo $a; // I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now

echo $b; // I'll "walk" the <b>dog</b> now

이것은 특수 문자를 제거하는 데 효과적 일 수 있습니다.

$modifiedString = preg_replace("/[^a-zA-Z0-9_.-\s]/", "", $content); 

preg regex 엔진을 사용하지 않고이를 수행하는 일반 바닐라 문자열 방법 :

function remEntities($str) {
  if(substr_count($str, '&') && substr_count($str, ';')) {
    // Find amper
    $amp_pos = strpos($str, '&');
    //Find the ;
    $semi_pos = strpos($str, ';');
    // Only if the ; is after the &
    if($semi_pos > $amp_pos) {
      //is a HTML entity, try to remove
      $tmp = substr($str, 0, $amp_pos);
      $tmp = $tmp. substr($str, $semi_pos + 1, strlen($str));
      $str = $tmp;
      //Has another entity in it?
      if(substr_count($str, '&') && substr_count($str, ';'))
        $str = remEntities($tmp);
    }
  }
  return $str;
}

내가 한 일은 : html_entity_decode를 사용한 다음을 사용 strip_tags하여 제거했습니다.


이 시도

<?php
$str = "\x8F!!!";

// Outputs an empty string
echo htmlentities($str, ENT_QUOTES, "UTF-8");

// Outputs "!!!"
echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");
?>

정말로 원하는 것은 다음과 같습니다.

function xmlEntities($string) {
    $translationTable = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);

    foreach ($translationTable as $char => $entity) {
        $from[] = $entity;
        $to[] = '&#'.ord($char).';';
    }
    return str_replace($from, $to, $string);
}

명명 된 엔터티를 해당 숫자로 대체합니다.


<?php
function strip_only($str, $tags, $stripContent = false) {
    $content = '';
    if(!is_array($tags)) {
        $tags = (strpos($str, '>') !== false
                 ? explode('>', str_replace('<', '', $tags))
                 : array($tags));
        if(end($tags) == '') array_pop($tags);
    }
    foreach($tags as $tag) {
        if ($stripContent)
             $content = '(.+</'.$tag.'[^>]*>|)';
         $str = preg_replace('#</?'.$tag.'[^>]*>'.$content.'#is', '', $str);
    }
    return $str;
}

$str = '<font color="red">red</font> text';
$tags = 'font';
$a = strip_only($str, $tags); // red text
$b = strip_only($str, $tags, true); // text
?> 

schnaader의 업그레이드에 참여하여 작업을 수행하는 데 사용한 기능은 다음과 같습니다.

    mysql_real_escape_string(
        preg_replace_callback("/&#?[a-z0-9]+;/i", function($m) { 
            return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); 
        }, strip_tags($row['cuerpo'])))

이 함수는 MySQL에 저장할 준비가 된 UTF-8로 변환 된 모든 html 태그와 html 기호를 제거합니다.


If you want to convert the HTML special characters and not just remove them as well as strip things down and prepare for plain text this was the solution that worked for me...

function htmlToPlainText($str){
    $str = str_replace('&nbsp;', ' ', $str);
    $str = html_entity_decode($str, ENT_QUOTES | ENT_COMPAT , 'UTF-8');
    $str = html_entity_decode($str, ENT_HTML5, 'UTF-8');
    $str = html_entity_decode($str);
    $str = htmlspecialchars_decode($str);
    $str = strip_tags($str);

    return $str;
}

$string = '<p>this is (&nbsp;) a test</p>
<div>Yes this is! &amp; does it get "processed"? </div>'

htmlToPlainText($string);
// "this is ( ) a test. Yes this is! & does it get processed?"`

html_entity_decode w/ ENT_QUOTES | ENT_XML1 converts things like &#39; htmlspecialchars_decode converts things like &amp; html_entity_decode converts things like '&lt; and strip_tags removes any HTML tags left over.

EDIT - Added str_replace(' ', ' ', $str); and several other html_entity_decode() as continued testing has shown a need for them.


You can try htmlspecialchars_decode($string). It works for me.

http://www.w3schools.com/php/func_string_htmlspecialchars_decode.asp


$string = "äáčé";

$convert = Array(
        'ä'=>'a',
        'Ä'=>'A',
        'á'=>'a',
        'Á'=>'A',
        'à'=>'a',
        'À'=>'A',
        'ã'=>'a',
        'Ã'=>'A',
        'â'=>'a',
        'Â'=>'A',
        'č'=>'c',
        'Č'=>'C',
        'ć'=>'c',
        'Ć'=>'C',
        'ď'=>'d',
        'Ď'=>'D',
        'ě'=>'e',
        'Ě'=>'E',
        'é'=>'e',
        'É'=>'E',
        'ë'=>'e',
    );

$string = strtr($string , $convert );

echo $string; //aace

ReferenceURL : https://stackoverflow.com/questions/657643/how-to-remove-html-special-chars

반응형