1

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

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

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

这是我第一次看到像上面这样的东西。我的页面上发生了两件事:1)上面的 URL 是针对我们的 CMS 查询的。出于某种原因,这很好用,我认为 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

任何帮助将非常感激。非常感谢!

4

1 回答 1

1

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

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

但是,如果您只是想取消转义 \x## 序列,您也可以使用相当简单的正则表达式来做到这一点。

于 2012-09-12T13:54:44.053 回答