如何从部分编码的文本中获得正确格式的内容


How to get correctly formatted content from partly encoded text

我的脚本得到了大量的文本——它可能是HTML代码,也可能只是纯文本,特殊字符可能被编码,也可能不被编码,或者两者兼而有之。

因此,内容可能包含以下内容:

Don't Do That
It's called "Meme"
He said: 'Yeah'

我该怎么做才能把它作为一个类型编码?

我试过了:

htmlentities(html_entity_decode($text), ENT_QUOTES, "UTF-8"), ENT_NOQUOTES, "UTF-8")

但它并不是在所有情况下都有效。例如:

返回

由于html_entity_decode不会对字符串进行"双重解码",因此可以使用以下内容:

$str=<<<STR
Don&#039;t Do That
It's called "Meme"
He said: &#039;Yeah&#039;
STR;
$tmp=html_entity_decode($str,ENT_QUOTES,"UTF-8");
while($str!=$tmp)
{
    $str=$tmp;
    $tmp=html_entity_decode($str,ENT_QUOTES,"UTF-8");
}

现在你有了一个完全解码的$str,你可以对它进行编码或直接使用它,无论你喜欢什么。

当然,这不是一个完美的解决方案——有时人们倾向于首先对字符串进行编码——如果你不能控制或过滤数据源,这可能值得一试。