PHP尚未使用实体转义的字符串转义

Kim*_*y W 5 php string html-entities

我正在使用第三方API,该API似乎返回的数据已带有实体代码。如The Lion’s Pride

如果我从API中按原样打印字符串,则它在浏览器中的显示效果就很好(在上面的示例中,它将放在撇号中)。但是,我不能相信,API将始终使用实体在未来,所以我想使用类似htmlentitieshtmlspecialchars之前,我打印自己。这样做的问题是它将再次在实体代码中对“&”号进行编码,并且最终结果将出现The Lion’s Pride在HTML源代码中,而HTML源代码不会呈现任何用户友好的内容。

如何使用htmlentitieshtmlspecialchars仅在尚未在字符串上使用它的情况下?是否有内置方法来检测字符串中是否已经存在实体?

Tha*_*you 4

似乎没有人回答你的实际问题,所以我会

\n\n
\n

仅当尚未在字符串上使用 htmlentities 或 htmlspecialchars 时,如何才能使用它?是否有内置方法来检测字符串中是否已存在实体?

\n
\n\n

不可能。如果我正在制作一篇有关 HTML 实体的教育帖子,并且我想将其实际打印在屏幕上,该怎么办:

\n\n
The Lion’s Pride\n
Run Code Online (Sandbox Code Playgroud)\n\n

...它需要编码为...

\n\n
The Lion’s Pride \n
Run Code Online (Sandbox Code Playgroud)\n\n

但如果这就是我们想要在字符串上打印的实际字符串呢?... 等等。

\n\n
\n\n

最重要的是,你必须知道你得到了什么,并从那里开始工作 \xe2\x80\x93 这是其他答案的建议来自 \xe2\x80\x93 这仍然只是一个解决方法。

\n\n

如果他们给你双重编码的字符串怎么办?如果他们开始将 html 编码的字符串包装在 XML 中怎么办?然后将其包装在 JSON 中?...然后将 JSON 转换为二进制字符串?可能性是无止境。

\n\n

您所依赖的 API 突然切换输出类型并非不可能,但这也相当大地违反了与您的用户的原始约定。在某种程度上,您必须对 API 抱有一定的信任,它会按照它所说的去做。单元/集成测试构成了信任的其余部分。

\n\n

而且因为你永远不可能编写一个程序来适应他们可能做出的任何可能的改变,所以尝试预测任何改变是毫无意义的。

\n