加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP是否负责$_GET和$_POST中变量的字符编码? (PHP 5.4)

发布时间:2020-12-13 16:50:03 所属栏目:PHP教程 来源:网络整理
导读:我的脚本是用UTF-8编写的,它使用的 MySQL数据库表的核心是utf8_unicode_ci.现在,如果我想将$_GET / $_ POST中的字符串与脚本/数据库中的“内部”字符串进行比较,或者甚至将某些内容放入数据库,我是否必须检查/修复变量的编码,或者 PHP是否已经执行了此操作我
我的脚本是用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页面正确指定了字符编码,浏览器应该也通常也会使用相同的格式.

当然,最好确保而不仅仅是假设 – 至少如果你需要确定它.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读