我已经做了大量的搜索,到目前为止还没有找到这个已经回答的问题(虽然我可能没有正确询问)。
我在页面上有一个简单的标题字符串,存储在php变量中
$title
当我打印它时,我得到了一个快乐,正常的字符串,就像我应该
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编码('),然后THEN对该结果字符串进行了urlencode。
当我打印手动编码的字符串
时urlencode("Art's");
Art%27s
结果正确。
我不能为我的生活弄清楚为什么在第一个例子中发生了额外的步骤。我已经尝试了一切。我在编码之前已经htmlspecialchar_decode -d $ title,我已经尽可能地打印它,我已经尝试过rawurlencode,我已经尝试了各种方法来颠倒javascript方面的html特殊字符,但最终无处可去。如果有人能够解决一些问题,甚至对可能出现的问题提出一些建议,那将是值得赞赏的。我真的希望避免为这个特定实例“定制”解决方案,因为它可能会在以后的其他伪装中显示出来。
解决方案:Quentin和JMB帮助排除了这一点,原始字符串已经是HTML编码,必须使用htmlspecialchars_decode($ title,ENT_QUOTES)将其转换为普通字符串。
答案 0 :(得分:2)
您的原始数据可能包含'
当您print_r
时,您的浏览器会将其解释为HTML并呈现'
。
答案 1 :(得分:1)
我找到了解决方案,这里是;
<?php
$string = "amir'qureshi";
$postipn3 = urlencode(htmlspecialchars_decode($string, ENT_QUOTES));
//out put will be amir%27qureshi
?>
答案 2 :(得分:0)
我通常做的是:
$string = htmlentities($string);
$string = html_entity_decode($string);
你也可以这样做:
$string = htmlentities(base64_encode($string));
$string = html_entity_decode(base64_decode($string));
也许那过度了但我喜欢它。
答案 3 :(得分: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 snip,看看它是否做同样的事情。如果是这样,就像其他人提到的那样,在某些地方你的php配置可能是一个愚蠢的设置。