【问题标题】:Decode a byte encoded string via my URL通过我的 URL 解码字节编码的字符串
【发布时间】:2012-09-12 21:54:44
【问题描述】:

我们在 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

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

【问题讨论】:

    标签: php


    【解决方案1】:

    此方法似乎可以满足您的要求:

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

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

    【讨论】:

    • 谢谢,不过我希望将这些类型的字符完全转换为正确的 UTF-8 等效字符。有没有办法我可以做到这一点?还是我可以使用的现成正则表达式?我不确定执行此操作的最有效方法,因为这是一种罕见的情况,但仍有可能。非常感谢。
    • 这很有可能会奏效,在您的示例中您提到了\xc3\xbc,这是 ü 在 UTF-8 中的精确二进制表示。
    • 太棒了,我没有意识到 stripslashes() 有这么多细节!它成功了,我接受了更新。非常感谢!
    • 好吧,它只是将其视为二进制字符串。所以要小心,如果我是你,我也会确保生成的 url 是有效的 UTF-8
    • 再次非常感谢。我对普通的英文 URL 和德文/法文特殊字符 URL 做了一些测试,现在这些似乎都可以正常工作了 :) 干杯
    猜你喜欢
    • 2012-03-25
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多