PHP 转义一个字符串,如果它还没有被实体转义的话

标签 php string html-entities

我正在使用第 3 方 API,它返回的数据似乎已经包含实体代码。比如 The Lion’s Pride

如果我按原样从 API 打印字符串,它在浏览器中呈现得很好(在上面的示例中,它会放入一个撇号)。但是,我不相信 API 将来会一直使用这些实体,所以我想在打印之前自己使用 htmlentitieshtmlspecialchars 之类的东西。这样做的问题是它会再次对实体代码中的 & 符号进行编码,最终结果将是 HTML 源代码中的 The Lion’s Pride,这不会呈现任何用户友好的内容。

只有当 htmlentitieshtmlspecialchars 尚未在字符串上使用时,我才能使用它?是否有内置方法来检测实体是否已存在于字符串中?

最佳答案

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

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 突然切换输出类型并非不可能,但这也是对您与用户的原始契约(Contract)的相当大的违反。在某种程度上,您必须对 API 有一定的信任才能按照它所说的去做。单元/集成测试构成了信任的其余部分。

并且因为您永远无法编写适用于他们可能做出的任何改变的程序,所以尝试预测任何改变是毫无意义的。

关于PHP 转义一个字符串,如果它还没有被实体转义的话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40091284/

相关文章:

php - 检查默认的用户选项

javascript - 在 URL 查询字符串之间调用 JavaScript 函数

android - Android 的 Html.escapeHtml 和 TextUtils.htmlEncode 有什么区别?我什么时候应该使用一个或另一个?

html - 俄罗斯卢布符号HTML代码?

html - Chrome 不尊重零宽度连接器

php - 为什么我的 paypal ipn 验证总是返回 INVALID?

php - Zend_Controller_Router_Route

php - 在 Zend Framework 中实现多语言的最佳方式

java - 当我们使用 + 运算符连接时创建的新字符串对象在哪里

string - 是否有 .NET 函数可以删除字符串开头的第一个(且仅是第一个)出现的位置?