php - PHP 会处理 $_GET 和 $_POST 中变量的字符编码吗? (PHP 5.4)

标签 php character-encoding http-post query-string http-get

我的脚本是用 UTF-8 编写的,它使用的 MySQL 数据库表的排序规则是 utf8_unicode_ci。现在,如果我想将 $_GET/$_POST 中的字符串与脚本/数据库中的“内部”字符串进行比较,甚至将某些内容放入数据库中,我是否必须检查/修复变量的编码还是 PHP 已经为我做了?

如果是前者,我是否可以在脚本开头简单地执行以下操作?

function inputToUtf8($string) {
  $detectedEncoding = mb_detect_encoding($string, 'UTF-8,ISO-8859-1', true);
  if ($detectedEncoding == 'UTF-8') {
    return $string;
  } elseif ($detectedEncoding == 'ISO-8859-1') {
    return utf8_encode($string);
  }
  throw new Exception('Invalid character encoding detected.');
}

foreach ($_GET as &$v) $v = inputToUtf8($v); unset($v);
foreach ($_POST as &$v) $v = inputToUtf8($v); unset($v);

最佳答案

PHP 不会为您做这些,但客户端浏览器通常会做。以您的 HTML 页面所采用的编码发送 GET/POST 数据是正常的,因此如果您为 HTML 页面正确指定了字符编码,浏览器应该并且通常也会使用相同的字符编码。

当然,确定比假设更好 - 至少在您需要确定的情况下。

编辑:为了明确这一点 - 确保我的意思是过滤掉与您期望的字符集不匹配的字符。您应该一次只设置、期望和支持一个字符集。

关于php - PHP 会处理 $_GET 和 $_POST 中变量的字符编码吗? (PHP 5.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15211069/

相关文章:

php - 使用 php 语言使用准备好的语句的通用 select(mysql) 函数

php - 在没有事件 session 的情况下,函数仍然从链接执行

PHP递归调用生成数组

php - 选择另一列的不同范围的数据计数和总和

mysql - Heroku 上的设置数据库是什么?

android - 发送 Json POST Android - 未添加数据

r - 如何将特殊字符转换为 R 中的 unicode?

mysql 设置名称 utf8 , "pokemon"和 "pokémon"实际上相等吗?

api - 作为 REST API 的一部分上传多个文件的最佳方式?单个或多个 POST 请求?

asp.net - 返回空 Request.Form 的简单 HTTP Post