Unicode编码在URL和数据库之间的某处失败

时间:2012-03-30 09:52:15

标签: php url unicode

我有一个小的php-snippet,当通过AJAX调用时,从数据库返回一些条目 - 标准的东西,真的。但是,我最近意识到存在一个问题:

有两种可能的方案:

  • 以一种在数据库中创建或更新某些内容的方式调用代码片段
  • 调用代码片段,根据php
  • 回显的HTML返回信息

现在,当要求片段更新某些内容时,必须提供一个字符串。如果这个字符串包含一些奇怪的字符,比如说σ,那么事情就会破坏:

  • 在发送请求的Javascript和数据库接收查询之间,sigma变得无法识别。我想这就是URI是一个URI而不是花哨的IRI。如果是这样,我该如何解决这个问题呢?如果有帮助,则sigma变为σ

  • 出于测试目的,我试图通过数据库接口直接输入sigma - 工作正常。 sigma看起来应该如此,但只能从 phpmyadmin GUI中获取! 一旦我从php-snippet请求这个工作sigma,我收到?

我可以理解如何通过URI推送sigma是有问题的,但是我不太明白为什么php无法正确处理第二个项目符号中请求的sigma - 我可以发誓php支持utf8_general_ci,这是数据库的整理。

所以,对于我的问题:

  • 如何对σ之类的奇数字符进行编码,以便在为UTI目的编码时不会被删除?
  • 我如何才能使php不会将西格玛变成问号?

注意:对于URL / URI / IRI等使用的术语,我一般感到困惑 - 我不一定在该领域受过教育。请原谅任何缩写的屠宰。

附录: Javascript传递给php-snippet的数据被推送到数据库中,用encodeURIComponent()进行编码。


更新:我已经通过以下方式缩小了问题:Javascript将正确的字符传递给php,但php本身会将错误的字符传递给数据库。由于php本身应该能够处理字符,我有以下问题:是否有可能php无法在mysql_query()内维护编码?

更多信息:错误传递的σ(在数据库中记录如下)将在我要求将其返回给php时保持此形式。

此外,由于php使用$_GET[]从URL中获取字符串,该函数是否可能会干扰编码?



最终补充:这是php文件本身就是问题!当我添加echo 'σ';时,我得到σ作为回报。在我看来,由于某种原因,我的php文档不是在utf8编码,我不知道如何调整...

好的,抓一点,那都错了。我已经获得了php的输出,即HTML,看起来是正确的,但即便如此,php通过查询到数据库的方式也是错误的。在查询时编码是否会失败?

1 个答案:

答案 0 :(得分:0)

无论如何要缩短,也许你可以在通过JS发布数据到DB之前找到它有用,所以现在尝试尝试插入和更新..

encodeURIComponent(你的post var)