REST Yii2-如何显示来自json中数据库的非UTF8字符?

汤姆

我正在构建使用WIN1257(不是UTF8)编码的Firebird 2.1数据库的Yii2 REST应用程序。如果数据不包含非拉丁字母,但是当varchar字段包含非拉丁语言规范字符时,我会得到json结果:我收到错误消息:

malformed UTF-8 characters, possibly incorrectly encoded., "yii\base\InvalidParamException"

完整的堆栈跟踪为:

{
  "name": "Exception",
  "message": "Malformed UTF-8 characters, possibly incorrectly encoded.",
  "code": 5,
  "type": "yii\\base\\InvalidParamException",
  "file": "C:\\xampp\\htdocs\\myproject\\vendor\\yiisoft\\yii2\\helpers\\BaseJson.php",
  "line": 123,
  "stack-trace": [
    "#0 C:\\xampp\\htdocs\\myproject\\vendor\\yiisoft\\yii2\\helpers\\BaseJson.php(61): yii\\helpers\\BaseJson::handleJsonError(5)",
    "#1 C:\\xampp\\htdocs\\myproject\\vendor\\yiisoft\\yii2\\web\\JsonResponseFormatter.php(89): yii\\helpers\\BaseJson::encode(Array, 320)",
    "#2 C:\\xampp\\htdocs\\myproject\\vendor\\yiisoft\\yii2\\web\\JsonResponseFormatter.php(73): yii\\web\\JsonResponseFormatter->formatJson(Object(yii\\web\\Response))",
    "#3 C:\\xampp\\htdocs\\myproject\\vendor\\yiisoft\\yii2\\web\\Response.php(948): yii\\web\\JsonResponseFormatter->format(Object(yii\\web\\Response))",
    "#4 C:\\xampp\\htdocs\\myproject\\vendor\\yiisoft\\yii2\\web\\Response.php(312): yii\\web\\Response->prepare()",
    "#5 C:\\xampp\\htdocs\\myproject\\vendor\\yiisoft\\yii2\\base\\Application.php(381): yii\\web\\Response->send()",
    "#6 C:\\xampp\\htdocs\\myproject\\web\\index.php(12): yii\\base\\Application->run()",
    "#7 {main}"
  ]
}

是否有可能派生出一些类,以便在将这些字符呈现给json格式器之前将这些字符转换为UTF8字符?当前无法将数据库迁移到UTF8,在这种情况下,Web应用程序应适应要求。

硫磺化剂

您可以将字符串从WIN1257转换为UTF-8吗?尝试libiconv:

$str = iconv("CP1257", "UTF-8", $str);

可悲的是,在撰写本文时,mb_convert_encoding 它不支持CP1257。

我相信总体上最好的解决方案是为属性创建一个getter / setter对。假设原始表格的栏名称为example_field将以下方法添加到模型中:

public function getExampleField()
{
    return iconv("CP1257", "UTF-8", $this->example_field);
}

public function setExampleField($value)
{
    $this->example_field = iconv("UTF-8", "CP1257", $value);
}

这样,您可以透明地$model->exampleField用作属性。您的应用程序甚至不需要了解幕后的编码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章