我正在使用第三方API,似乎使用已存在的实体代码返回其数据.比如The Lion&#骄傲.
如果我按原样从API打印字符串,它在浏览器中渲染得很好(在上面的示例中,它会放入一个撇号).但是,我不相信API将来会一直使用这些实体,因此我想在打印之前自己使用htmlentities或htmlspecialchars之类的东西.这样做的问题在于它会再次在实体代码中对&符号进行编码,最终结果将是The Lion& amp; amp;在HTML源代码中的Pride,它不会呈现任何用户友好的内容.
只有在字符串上尚未使用htmlentities或htmlspecialchars时,我才能使用它?是否有内置方法来检测字符串中是否已存在实体?
最佳答案 似乎没有人回答你的实际问题,所以我愿意
How can I use htmlentities or htmlspecialchars only if it hasn’t already been used on the string? Is there a built-in way to detect if entities are already present in the string?
不可能.如果我正在制作关于HTML实体的教育帖子,我想在屏幕上实际打印这个内容怎么办?
The Lion’s Pride
……它需要编码为……
The Lion’s Pride
但是,如果那是我们想要在字符串上打印的实际字符串呢? … 等等.
最重要的是,您必须知道您已经获得了什么并从那里开始工作 – 这是其他答案的建议所在 – 这仍然只是一种解决方法.
如果他们给你双重编码字符串怎么办?如果他们开始用XML包装html编码的字符串怎么办?然后用JSON包装它? …然后JSON转换为二进制字符串?可能性是无止境.
您所依赖的API突然切换输出类型并非不可能,但这也违反了与用户的原始合同.在某种程度上,你必须对API有所信任,才能按照它所说的去做.单元/集成测试构成了信任的其余部分.
而且因为你永远不会编写一个可以为他们所做的任何可能的改变而工作的程序,所以尝试预测任何改变都是毫无意义的.