【问题标题】:Strange problem of apostrophe in communicating with PHP script from Android与Android中的PHP脚本通信时撇号的奇怪问题
【发布时间】:2010-07-14 09:43:32
【问题描述】:

我正在与 Android 应用程序中的 PHP Web 服务进行通信。从 android 发送的所有请求都使用 UTF-8 编码,php 脚本使用 utf-8 对其进行解码。

但是,当任何请求以撇号 ' 发送时,php 的解码功能似乎无法正常工作。

例如,如果我将请求发送为“今日星座”,那么它的 utf-8 编码将是“今日%27s+星座”。我试图用 Android 解码它并且它是成功的。但在 php 中,它在解码后给出了相同的文本。

数据库是MySql。这是数据库或php的问题吗?我不确定,但是这个问题有什么解决方法吗?

问候

苏尼尔

【问题讨论】:

    标签: php android apostrophe


    【解决方案1】:

    这不是 UTF-8 编码,它被称为 URL 或percent encoding。尝试在将数据插入数据库之前通过urldecode() 运行数据。

    【讨论】:

    • 在 PHP 中我们使用了相同的东西,即 urldecode() 但问题仍然存在。你能告诉我是什么问题吗?
    • @sunil 请显示您用于插入数据的代码。
    • 这就是我无法访问 PHP 代码的问题。你能告诉我它是解码问题还是插入到 MySQl 中?
    • @sunil 恐怕不看代码就无法判断。
    • 你能给我一个你使用urldecoding和插入mysql的样本吗?如果可以的话,这将是很大的帮助。
    【解决方案2】:
    urldecode(rawurldecode("Today%27s+Horoscope"));
    

    正如 Pekka 指出的那样,urldecode 在这种情况下就足够了,这主要是(过度的)预防措施,因为我已经看到 urldecode 失败了

    【讨论】:

    • rawurldecode 真的有必要吗? urlencode() 不是同时处理这两个事情吗?
    • 你是对的,但我见过只有两者都给出正确解决方案的情况,不知道为什么,但在这种情况下,urldecode() 就足够了。我只是总是使用两者来确保......
    • 如果你有一个 % 登录文本双重解码会破坏你的文本。
    【解决方案3】:

    我在 php 代码中尝试了您的示例,但无法得到您提到的错误。

    $str = "Today's Horoscope";
    
    echo $str; //Today's Horoscope
    
    echo "Encoded: ".urlencode($str); //Encoded: Today%27s+Horoscope
    
    echo "Decoded: ".urldecode($str); //Decoded: Today's Horoscope
    

    如果您想在插入数据库之前转义引号,请使用 mysql_real_escape_string($str);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多