web-dev-qa-db-ja.com

html特殊文字を削除する方法は?

HTMLタグを削除するアプリケーションのRSSフィードファイルを作成しています。これはstrip_tags。しかし、strip_tagsはHTMLの特別なコード文字を削除しません:

  & © 

等.

これらの特別なコード文字を文字列から削除するために使用できる関数を教えてください。

54
Prashant

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); 
106
schnaader

つかいます - html_entity_decode はHTMLエンティティを変換します。

正しく機能させるには、文字セットを設定する必要があります。

20
andi

上記の良い答えに加えて、PHPには、非常に便利な組み込みのフィルター関数filter-varもあります。

HMTL文字を削除するには、次を使用します。

$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);

詳細:

  1. function.filter-var
  2. filter_sanitize_string
16
gpkamp

Htmlentities()およびhtml_entity_decode()をご覧ください here

$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
8
0xFF

これは、特殊文字を削除するのにうまくいくかもしれません。

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

これを試して

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

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

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

私がやったのは、html_entity_decodeを使用し、strip_tagsを使用してそれらを削除することでした。

2
Gwapz Juan

プレグ正規表現エンジンを使用せずにそれを行う単純なバニラ文字列の方法:

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;
}
2
karim79

あなたが本当に欲しいものは次のように見えます:

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);
}

名前付きエンティティをその番号に相当するものに置き換えます。

1
Jacco

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'])))

この関数は、すべてのHTMLタグとHTMLシンボルを削除し、UTF-8に変換してMySQLに保存できるようにします

1
Lalala
<?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
?> 
1
jahanzaib

HTML特殊文字をconvertしたいだけでなく、削除してプレーンテキストを準備したい場合は、これが有効なソリューションでした私...

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は&#39;のようなものを変換しますhtmlspecialchars_decodeは&amp;のようなものを変換しますhtml_entity_decodeは'&lt;のようなものを変換します。

[〜#〜] edit [〜#〜]-str_replace( ''、 ''、$ str);を追加しました;継続的なテストがそれらの必要性を示したので、他のいくつかのhtml_entity_decode()。

1
Jay

htmlspecialchars_decode($string)を試すことができます。わたしにはできる。

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

0
surabhivin