【问题标题】:PHP ENV_ variables: UTF-8 encoding of £ (Pound)PHP ENV_ 变量:英镑(英镑)的 UTF-8 编码
【发布时间】:2011-04-26 15:30:19
【问题描述】:

我遇到了“£”字符的编码问题。 (问题:当从表单字段中发布“£”并进行插入时,MySQL 表中没有插入任何内容)。我已经检查了我的 PHP 代码头、服务器、MySQL 上的排序规则/字符集等上对 UTF-8 支持的所有内容。

我使用 MAMP 作为我的开发环境 (PHP 5.3.5)。

在我的生产服务器(商业主机)(PHP 5.2.6)上一切正常,所以我已经排除了我的代码的任何问题

但是,我想我已经找到了罪魁祸首:在比较两种环境时,我的开发服务器中缺少这一行:

_ENV["HTTP_ACCEPT_CHARSET"] ISO-8859-1,utf-8;q=0.7,*;q=0.3

但是,我无法看到 php.ini 中的任何内容来更改它。有什么想法,还是我找错了树?

干杯

罗兰

【问题讨论】:

  • 回复:“我的生产服务器上一切正常 [...] 所以我已经排除了我的代码的任何问题”:这是错误!您可能对某些环境设置有错误的依赖,而您幸运地在生产系统上得到了“正确”的设置。
  • HTTP Accept-Charset 标头来自客户端。您的浏览器可能在通信期间没有发送该标头,并且它忽略了来自服务器的 Charset: UTF-8 标头(您正在发送一个对吗?)并且浏览器正在发送它想要的任何东西。
  • 附带问题,是否有必要让人们输入英镑'£'符号?你能不能把它硬编码或从下拉菜单中选择一个?然后你可以使用£

标签: mysql utf-8 php


【解决方案1】:

我会写一个简单的测试来检查哪里出了问题。

  • echo() 从 PHP 中的 $_POST 中取出值,并验证浏览器是否正确发送数据以及是否正确解析为 PHP。进行此测试时,请确保浏览器已正确检测到字符集。
  • 如果这样可行,那么您可能错误地配置了数据库的某些内容。如果您将表排序规则和连接编码都设置为“UTF-8”,那么将数据保存到 MySQL 中应该没有问题(如果 SET NAMES 和表排序规则相同,则不会继续进行翻译,所以它会正确存储在表中)。

您在问题的任何地方都没有提到 MySQL 连接(只是“等”)。以防万一您遗漏了什么,请仔细阅读这篇文章How to Avoid Character Encoding Problems in PHP

【讨论】:

  • 连接和排序规则都设置为 UTF-8,就像我的 Codeigniter 配置 VAR 一样(我认为它会覆盖任何问题)。我正在使用 Firebug 来查看 XHR POST 数据并且 £ 发布得很好(尽管如果我查看原始数据,它已将其编码为 %C%A20)没有人解决 _ENV[" 的 phpinfo() 转储中的差异HTTP_ACCEPT_CHARSET"] ISO-8859-1,utf-8;q=0.7,*;q=0.3
  • 请按照我的建议使用PHP的原语echo()$_POST变量返回数据。
  • @Roland,我对你的问题发表了评论:P
  • @James C 使用 Firebug,参数列表显示 £(原始序列化 html 显示 %C2%A3)@Kevin,取自 PHPINFO() 转储。我错过了什么吗?
  • 非常努力地帮助你,但你并没有让它变得容易! Firebug 将向您显示浏览器向服务器发送的内容,而不是 PHP 变量空间。除非你echo(),否则我不能再帮你了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
相关资源
最近更新 更多