【问题标题】:json_encode produce JSON_ERROR_UTF8 from MSSQL-SELECTjson_encode 从 MSSQL-SELECT 生成 JSON_ERROR_UTF8
【发布时间】:2013-08-15 06:57:47
【问题描述】:

我在对 mssql 进行数据库查询时遇到了一个烦人的问题。如果结果包含像德语'ä'这样的特殊字符,我无法使用 json_encode 来正确获取 json 格式的结果。

json_last_error 返回 5 等于 JSON_ERROR_UTF8。我猜数据库不会返回 UTF-8 编码的值。数据库集合是 *Latin1_General_CI_AS*,受影响的列是 varchars。

php mssql.charset 配置无效。

我读到 mysql 用户可以使用 mysql_query('SET CHARACTER SET utf8'); 正确编码返回值。我该怎么做才能正确获取 mssql 的值?

提示 - 我无法更改数据库中的任何内容。

【问题讨论】:

  • 在json_encode()之前尝试php的iconv()
  • utf8_encode 数据优先。

标签: php sql-server json select special-characters


【解决方案1】:

在进行 JSON 编码之前,请在字符串周围使用 utf8_encode()。

【讨论】:

  • 这似乎是最好的解决方案。只需遍历结果并转换即可。感谢您的提示。
【解决方案2】:

你也可以在你的连接中设置这个:

$result = sqlsrv_connect($hostname, array(
    'UID' => $username,
    'PWD' => $password,
    'Database' => $database,
    "CharacterSet" => "UTF-8"   // <---- here the magic happens 
));

对我来说,这是更简单的方法。

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多