首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php - sqlsrv编码

php - sqlsrv编码
EN

Stack Overflow用户
提问于 2013-04-12 11:41:13
回答 1查看 2.2K关注 0票数 1

我的项目构建在PHP之上,并连接到。我正在使用sqlsrv库。MS中的字段类型为nvarchar。当我定义连接的参数时,我也会放"utf8“。它是:

代码语言:javascript
复制
global $cnf;
$cnf = array();
$cnf["mssql_user"]  = "xxx";
$cnf["mssql_host"]  = "xxx";
$cnf["mssql_pw"]    = "xxx";
$cnf["mssql_db"]    = "xxx";
$cnf["CharacterSet"]    = "**UTF-8**";

当将记录插入数据库时,对于越南语内容和中文内容,我使用:

代码语言:javascript
复制
$city = iconv('UTF-8', 'utf-16le', $post['city']);
$params = array(array($city, null, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)));
$sql= "INSERT INTO tblCityGarden (city) VALUES(?)
$stmt   = sqlsrv_query( $this->dbhandle, $sql, $params);

它为越南语和汉语插入数据OK (越南语和汉语数据库中存储的数据是正确的)。

但是,当我将记录加载回web时,会出现奇怪的字符(?,�)。我尝试了一些php,比如iconv,mb_detect_encoding,mb_convert_encoding,并在互联网上搜索了许多结果,但是它不能工作。如何显示正确的数据?

请在这个问题上有经验的人

EN

回答 1

Stack Overflow用户

发布于 2015-10-16 18:29:15

我也有同样的问题(�),但是对于单引号、双qoutes和“版权保留”字符.以下是我的发现:

  • 指定的CharacterSet似乎“规则所有”,所以您将其设置为决定连接的编码(正如它应该的那样)。我的连接上没有配置任何CharacterSet。简单地设置它解决了我的问题,同时确保插入到我的DB中的值不会通过htmlspecialchars()进行双重编码。
  • 必须在输出之前设置header()s(这是非常重要的)。
  • 不能将标题设置为文档后面的其他内容。
  • 有时,在PHP文件中关闭?>之前和/或之后使用尾空格可能会导致问题(我没有使用这个结束标记,但在搜索时我看到了这一点)。

我不熟悉iconv(),而且我在编码方面肯定没有经验,但我解决了我的问题,只是花时间检查我的头并确保它们符合上述标准.

您的查询参数看起来也很奇怪:$params = array(array($city, null, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)));

我还没有看到多维数组被传递到这个论点中..。(只是一张便条)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15970444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档