3

我已经进行了大量搜索,但到目前为止还没有找到已经回答的问题(尽管我可能没有正确询问)。

我在存储到 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) 将其转换为普通字符串。

4

4 回答 4

2

您的原始数据可能包括 HTML 字符参考'

当您使用print_r它时,您的浏览器会将其解释为 HTML 并呈现'.

于 2012-10-25T19:36:09.247 回答
1

我已经找到了解决方案,在这里;

<?php
$string = "amir'qureshi";
$postipn3 = urlencode(htmlspecialchars_decode($string, ENT_QUOTES));
//out put will be amir%27qureshi
?>
于 2015-07-29T13:58:52.170 回答
0

我通常做的是:

$string = htmlentities($string);
$string = html_entity_decode($string);

你也可以这样做:

$string = htmlentities(base64_encode($string));
$string = html_entity_decode(base64_decode($string));

也许那是过度的,但我喜欢它。

于 2012-10-25T19:22:11.237 回答
0

对于它的价值,当我运行这段代码时:

<?php
$title = "Art's of Glass: Photos From Crystal Castles' Gra";
$title = urlencode($title);
print_r($title);
?>

我得到这个结果:

Art%27s+of+Glass%3A+Photos+From+Crystal+Castles%27+Gra

我们可以看到更多你的代码吗?不知道你为什么会从你提供的东西中遇到这个问题......

尝试只使用我使用的 php 片段,看看它是否做同样的事情。如果是这样,就像其他人提到的那样,它可能是您的 php 配置中某处的愚蠢设置。

于 2012-10-25T19:27:25.080 回答