0

我有一台 Fedora 机器作为服务器,运行 php 5.3 的 apache

脚本充当向我发送“消息”的各种来源的入口页面。

php 脚本的调用如下:serverAddress/phpScript.php?message=MyMessage然后通过 PDO 保存消息以连接到 SqlServer 2008 db。

如果消息包含任何特殊字符(例如德语),例如:üäöß 那么在数据库中我会得到一些乱码而不是正确的字符串:üäöß

db 完全支持 UTF-8 - 我可以连接和发送/检索德语字符,而其他工具没有任何问题(不是通过 php)。

php脚本内部:

  • 如果我回显输入字符串,我会得到正确的字符串 üäöß
  • 如果我将它保存到文件中(记录输入),我会看到乱码:üäöß

是什么导致了这种行为?我该如何解决?

  • 启用多字节(yum install php-mbstring,然后重新启动 apache)

  • 在我的 php 脚本开始时,我有:

    mb_internal_encoding('UTF-8');
    mb_http_output('UTF-8');
    mb_http_input('UTF-8');
    mb_language('uni');
    mb_regex_encoding('UTF-8');
    ob_start('mb_output_handler');
  • 据我了解,通过 PDO 处理 mssql 时的默认编码类型是 UTF-8

新发展:

一位同事将我指向我看到的PDO_DBLIB 页面(此时仅从缓存中可见)$res->bindValue(':value', iconv('UTF-8', 'ISO8859-1', $value);

我用我的所有替换 $res->bindParam(':text',$text);$res->bindParam(':text',iconv('UTF-8', 'ISO8859-1',$text));一切正常:)。

不再需要 mb_internal_encoding.... 和所有其他行。

为什么使用 ISO8859-1 编码时它会起作用?

4

2 回答 2

2
于 2012-09-14T15:31:21.307 回答
0

看看这篇关于“在 Web 应用程序中从前到后处理 Unicode”的文章。到目前为止,我在这个主题上看到的最好的文章之一。如果您遵循指南并且问题仍然存在,那么您肯定知道这不是您的错。

于 2012-09-14T14:28:10.940 回答