Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何删除html特殊字符?_Php_Html Encode - Fatal编程技术网

Php 如何删除html特殊字符?

Php 如何删除html特殊字符?,php,html-encode,Php,Html Encode,我正在为我的应用程序创建一个RSS提要文件,我想在其中删除HTML标记,这是通过strip\u tags完成的。但是strip_标记没有删除HTML特殊代码字符:   & © 等等 请告诉我可以用来从字符串中删除这些特殊代码字符的函数。用于转换HTML实体 您需要设置字符集以使其正常工作。您可能需要查看htmlEntity()和html\u entity\u decode() $orig=“我现在就去遛狗”; $a=htmlentities

我正在为我的应用程序创建一个RSS提要文件,我想在其中删除HTML标记,这是通过
strip\u tags
完成的。但是
strip_标记
没有删除HTML特殊代码字符:

  & © 
等等

请告诉我可以用来从字符串中删除这些特殊代码字符的函数。

用于转换HTML实体


您需要设置字符集以使其正常工作。

您可能需要查看htmlEntity()和html\u entity\u decode()

$orig=“我现在就去遛狗”;
$a=htmlentities($orig);
$b=html_实体_解码($a);
回声$a;//我现在“走”b日志/b
回声$b;//我现在就去遛狗

使用
html\u entity\u decode
对其进行解码,或使用
preg\u replace
将其删除:

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

编辑:根据Jacco的评论选择

将“+”替换为 {2,8}什么的。这将限制 替换整个系统的机会 使用未编码的“&”时的句子 现在


无需使用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;
}

看起来你真正想要的是:

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

此函数删除每个html标记和html符号,这些标记和符号转换为UTF-8格式,可以保存在MySQL中。

除了上面的好答案之外,PHP还有一个非常有用的内置过滤函数:filter-var

要删除HMTL字符,请使用:

$cleanString=filter\u var($dirtyString,filter\u SANITIZE\u STRING)

更多信息:


  • 这可以很好地删除特殊字符

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

    我所做的是使用:
    html\u entity\u decode
    ,然后使用
    strip\u标记来删除它们。

    试试这个

    <?php
    $str = "\x8F!!!";
    
    // Outputs an empty string
    echo htmlentities($str, ENT_QUOTES, "UTF-8");
    
    // Outputs "!!!"
    echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");
    ?>
    

    您可以尝试
    htmlspecialchars\u解码($string)
    。它对我有用

    如果您想转换HTML特殊字符,而不仅仅是删除它们,以及剥离内容并准备纯文本,这是一个适合我的解决方案

    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?"`
    
    函数HTMLTO纯文本($str){
    $str=str_替换('',$str);
    $str=html_实体_解码($str,ENT_引号,'UTF-8');
    $str=html_实体_解码($str,ENT_HTML5,'UTF-8');
    $str=html_实体_解码($str);
    $str=htmlspecialchars\u解码($str);
    $str=带标签($str);
    返回$str;
    }
    $string='这是一个测试

    是的,这是&;它被“处理”了吗 纯文本($string); //“这是()一个测试。是的,这是!&它得到处理了吗?”`
    html_entity_decode w/ENT_QUOTES|ENT_XML1转换
    和#39
    htmlspecialchars\u decode可转换
    &
    html_entity_decode转换类似
    而strip_标记会删除所有剩余的HTML标记


    编辑-添加str_替换(“”,,$str);和其他几个html_entity_decode(),继续测试表明需要它们。

    如果您在WordPress中工作,与我一样,只需要检查一个空字段(在看似空白的字符串中有大量随机html实体),请查看:

    sanitize_title_with_dashes( string $title, string $raw_title = '', string $context = 'display' )
    


    对于不使用WordPress的人,我发现这个函数对于创建我自己的消毒剂非常有用,看看完整的代码,它真的很深入

    将“+”替换为“可能会更好”{2,8]或其他什么。这将限制在出现未编码的“&”时替换整个句子的机会。谢谢,在答案中添加了您的注释和替代版本。但是为什么要删除这些字符呢?这些字符实体在RSS/Atom/XML中无效。因此,您可以做两件事:删除它们,或者用它们的名称替换它们数字等效。必须删除它们的一种可能情况是,在电子邮件中剥离HTML以将其作为备用纯文本正文发送。这更正确,因为当我们仅用空字符串替换时,我们得到的结果不正确-所有不可破坏的空格都被压缩。这!您只需在上运行
    HTML\u entity\u decode
    字符串,然后使用
    strip\u标记
    ,最后使用
    filter\u var($string,filter\u SANITIZE\u string)
    。我知道线程有点旧,但我希望解决相同的问题…不幸的是filter\u var需要5.2或更高版本…否则这就是答案(至少对我的特定问题而言)。谢谢。创建一个rss源,而不是保存到sqlmake一些注释“为什么你的代码可以工作”?这样其他人就会明白了。对链接到W3Schools而不是官方文档投了反对票:也就是说,这并不能解决OP的问题。这并不能回答OPs问题。所以添加str_替换(“,”,$str);所以不要像我的情况那样,用某种特殊的字符来隐藏。
    $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
    
    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?"`
    
    sanitize_title_with_dashes( string $title, string $raw_title = '', string $context = 'display' )