我的项目构建在PHP之上,并连接到。我正在使用sqlsrv库。MS中的字段类型为nvarchar。当我定义连接的参数时,我也会放"utf8“。它是:
global $cnf;
$cnf = array();
$cnf["mssql_user"] = "xxx";
$cnf["mssql_host"] = "xxx";
$cnf["mssql_pw"] = "xxx";
$cnf["mssql_db"] = "xxx";
$cnf["CharacterSet"] = "**UTF-8**";当将记录插入数据库时,对于越南语内容和中文内容,我使用:
$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,并在互联网上搜索了许多结果,但是它不能工作。如何显示正确的数据?
请在这个问题上有经验的人
发布于 2015-10-16 18:29:15
我也有同样的问题(�),但是对于单引号、双qoutes和“版权保留”字符.以下是我的发现:
CharacterSet似乎“规则所有”,所以您将其设置为决定连接的编码(正如它应该的那样)。我的连接上没有配置任何CharacterSet。简单地设置它解决了我的问题,同时确保插入到我的DB中的值不会通过htmlspecialchars()进行双重编码。?>之前和/或之后使用尾空格可能会导致问题(我没有使用这个结束标记,但在搜索时我看到了这一点)。我不熟悉iconv(),而且我在编码方面肯定没有经验,但我解决了我的问题,只是花时间检查我的头并确保它们符合上述标准.
您的查询参数看起来也很奇怪:$params = array(array($city, null, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)));
我还没有看到多维数组被传递到这个论点中..。(只是一张便条)
https://stackoverflow.com/questions/15970444
复制相似问题