通过我的URL解码一个字节编码的字符串

时间:2012-09-12 13:18:36

标签: php

我们在Zend Framework上有一个带有后端Postgresql数据库的PHP站点。我们的主要字符编码是UTF-8。

我刚检查了错误日志,发现了一个奇怪的条目。我的网址如下: www.mydomain.com/schuhe-für-breite-füsse

然而有人(或者可能是机器人)试图访问此URL,如下所示: www.mydomain.com/schuhe-f\xc3\xbcr-breite-f\xc3\xbcsse /

这是我第一次看到类似上面的内容。我的页面上发生了两件事: 1)针对我们的CMS查询上述URL。由于某些原因,这种方法很好用,我认为Postgresql重新进行了字节编码,然后在尝试在我们的数据库中找到这个SEF URL时将其转换回来。

2)在页面上发出Ajax请求,传递相同的SEF URL。这失败了。我相信斜杠会导致Javascript出现问题。

为了避免这种情况,我想解码任何像这样编码的URL。但是,对以下代码的快速测试并没有为我解码任何内容:(

$landing_sef_url = $this->_getParam('landing_sef_url');
$utf8=html_entity_decode($landing_sef_url);
$iso8859=utf8_decode($utf8);
$test3 = html_entity_decode($landing_sef_url, 1, "ISO-8859-1");
$test4 = urldecode($landing_sef_url);

echo utf8_decode("$landing_sef_url");
echo "<br/><br/>";
die($landing_sef_url . " -- $utf8 -- $iso8859 <br/>$test3<br/>$test4");

我通过各种在线帖子找到了上述内容,但他们都打印出相同的结果 - schuhe-f \ xc3 \ xbcr-breite-f \ xc3 \ xbcsse

任何帮助都会非常感激。非常感谢!

1 个答案:

答案 0 :(得分:1)

这种方法似乎可以满足您的需求:

http://li.php.net/manual/en/function.stripcslashes.php

但是如果你只是想看unescape \ x ##序列,你也可以使用一个相当简单的正则表达式来完成这个。