我已经进行了大量搜索,但到目前为止还没有找到已经回答的问题(尽管我可能没有正确询问)。
我在存储到 php 变量中的页面上有一个简单的标题字符串
$title
当我 print_r 它时,我会像我应该的那样得到一个快乐,正常的字符串
Art's of Glass: Photos From Crystal Castles' Gra
现在这里是我迷路的地方。我在这个变量上运行 urlencode 然后我回来了
urlencode($title);
Art%26%23039%3Bs+of+Glass%3A+Photos+From+Crystal+Castles%26%23039%3B+Gra
如果您查看前 10 个字符,则 urlencode 完成了它应该做的事情,但它也做了一些额外的事情。它将“'”更改为它的 html 编码 ('),然后对结果字符串进行 urlencode。
当我打印手动编码的字符串时
urlencode("Art's");
Art%27s
结果正确地出来了。
我一生都无法弄清楚为什么在第一个示例中会发生额外的步骤。我什么都试过了。我在编码之前已经 htmlspecialchar_decode -d $title,我已经尽可能地打印它,我已经尝试了 rawurlencode,我已经尝试了在 javascript 端反转 html 特殊字符的所有方法,但最终无处可去。如果有人可以阐明一些问题,甚至对可能存在的问题提出一些建议,那将不胜感激。我真的很想避免不得不为这个特定实例“定制”解决方案,因为它可能会在以后以其他伪装出现。
解决方案:Quentin 和 JMB 帮助解决了这个问题,原始字符串已经被 HTML 编码,必须使用 htmlspecialchars_decode($title, ENT_QUOTES) 将其转换为普通字符串。