PHP-从字符串中删除解码的HTML实体

时间:2018-07-31 19:44:41

标签: php string replace html-entities

我正在尝试对字符串进行清理,并最终得到以下结果:

  

芽孢杆菌中砷抗性基因的表征   从成熟的粉煤灰酸性矿山排水中分离UWC   中和的固体

我正在尝试删除lt,i,gt,因为这些都是简化的HTML实体,似乎并未删除。解决这个问题或我可以看到的其他解决方案的最佳方法是什么?

这是我目前的解决方案:

tensor([[-1.9903, -4.0458, -4.1143, -4.0074, -3.5510,  7.1074]], device='cuda:0')

这是示例输入字符串:

/**
 * @return string
 */
public function getFormattedTitle()
{
    $string = preg_replace('/[^A-Za-z0-9\-]/', ' ',  filter_var($this->getTitle(), FILTER_SANITIZE_STRING));
    return $string;
}

谢谢!

3 个答案:

答案 0 :(得分:2)

尝试使用strip_tags代替filter_var:http://php.net/manual/en/function.strip-tags.php

<?php
  //your input string
  $input_string = 'Assessing <i>Clivia</i> taxonomy using the core DNA barcode regions, <i>matK</i> and <i>rbcLa</i>';

  //strip away all html tags but leave whats inside
  $output_string = strip_tags($input_string);

  echo $output_string;
  //echos: Assessing Clivia taxonomy using the core DNA barcode regions, matK and rbcLa 

?>

答案 1 :(得分:2)

输出中的ltgt告诉我,您所拥有的字符串实际上更像是:

“使用核心DNA条形码区域,imatK / i和rbcLa / i评估iClivia / i分类法”

当被视为纯文本时。

您在上面显示的字符串是在浏览器中显示的,该浏览器将解释“&lt;”为“ <”和“&gt;”为“>”。 (这些通常称为“ HTML实体”,并提供了一种编码字符的方式,否则该字符将被解释为HTML。)

一个选项就是这样处理:

$s = "Assessing &lt;i&gt;Clivia&lt;/i&gt; taxonomy …";
$s = html_entity_decode($s); // $s is now "Assessing <i>Clivia</i> taxonomy …"
$s = strip_tags($s); // $s is now "Assessing Clivia taxonomy"

但是请注意,strip_tags是一个非常幼稚的功能。例如,它将把“ 1 <5和6> 2”变成“ 12”!因此,您需要确保所有输入文本均采用双HTML编码,因为该示例可以使其正常工作。

答案 2 :(得分:0)

更好的方法是strip_tags(); 在此处查看手册: http://php.net/manual/ru/function.strip-tags.php 一个例子:

   public function getFormattedTitle()
    {
        return strip_tags($this->getTitle(), '<i>');
    }