Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Sphinx-在Sphinx记录上调用json_encode()时,参数中的UTF-8序列无效错误_Php_Mysql_Utf 8_Yii2_Sphinx - Fatal编程技术网

Php Sphinx-在Sphinx记录上调用json_encode()时,参数中的UTF-8序列无效错误

Php Sphinx-在Sphinx记录上调用json_encode()时,参数中的UTF-8序列无效错误,php,mysql,utf-8,yii2,sphinx,Php,Mysql,Utf 8,Yii2,Sphinx,我正在使用Yii2框架和Sphinx搜索服务器为多语言搜索编写一个web服务。搜索在网站上运行完全正常,但在点击此web服务时抛出错误 { "name": "PHP Warning", "message": "json_encode(): Invalid UTF-8 sequence in argument", "code": 2, "type": "yii\\\\base\\\\ErrorException", "file": "C:\\\\xampp\\\\htdocs\

我正在使用Yii2框架和Sphinx搜索服务器为多语言搜索编写一个web服务。搜索在网站上运行完全正常,但在点击此web服务时抛出错误

{
  "name": "PHP Warning",
  "message": "json_encode(): Invalid UTF-8 sequence in argument",
  "code": 2,
  "type": "yii\\\\base\\\\ErrorException",
  "file": "C:\\\\xampp\\\\htdocs\\\\my-website\\\\vendor\\\\yiisoft\\\\yii2\\\\helpers\\\\BaseJson.php",
  "line": 38,
  "stack-trace": [
    "#0 [internal function]: yii\\\\base\\\\ErrorHandler->handleError(2, 'json_encode(): ...', 'C:\\\\xampp\\\\htdocs...', 38, Array)",
    "#1 C:\\\\xampp\\\\htdocs\\\\my-website\\\\vendor\\\\yiisoft\\\\yii2\\\\helpers\\\\BaseJson.php(38): json_encode(Array, 320)",
    "#2 C:\\\\xampp\\\\htdocs\\\\my-website\\\\vendor\\\\yiisoft\\\\yii2\\\\web\\\\JsonResponseFormatter.php(53): yii\\\\helpers\\\\BaseJson::encode(Array)"
  ]
}
我已经使用fzaninotto/Faker包在数据库中植入了大量英文和法文的虚拟真实文本。斯芬克斯搜索的工作原理是“按标题搜索”和“按类别ID搜索”。我发现,当使用某些具有法语翻译的特定类别ID进行搜索时,会出现此错误。因此,当Sphinx索引类别时,它会更改排序规则(UTF-8),当从Sphinx检索回来时,会发生错误。在没有json_encode()的情况下转储数据会得到一些数据库表中不存在的垃圾类别文本

这是我的狮身人面像配置

index tender
{
    source          = post
    path            = C:/xampp/htdocs/sphinx/data/posts
    min_infix_len   = 3
    enable_star     = true
    charset_type    = utf-8
    charset_table   = 0..9, A..Z->a..z, _, a..z, \
                    U+410..U+42F->U+430..U+44F, U+430..U+44F, \
                    U+C5->U+E5, U+E5, U+C4->U+E4, U+E4, U+D6->U+F6, U+F6, U+16B, U+0c1->a, U+0c4->a, \
                    U+0c9->e, U+0cd->i, U+0d3->o, U+0d4->o, U+0da->u, U+0dd->y, U+0e1->a, U+0e4->a, \
                    U+0e9->e, U+0ed->i, U+0f3->o, U+0f4->o, U+0fa->u, U+0fd->y, U+104->U+105, U+105, \
                    U+106->U+107, U+10c->c, U+10d->c, U+10e->d, U+10f->d, U+116->U+117, U+117, \
                    U+118->U+119, U+11a->e, U+11b->e, U+12E->U+12F, U+12F, U+139->l, U+13a->l, \
                    U+13d->l, U+13e->l, U+141->U+142, U+142, U+143->U+144, U+144, U+147->n, \
                    U+148->n, U+154->r, U+155->r, U+158->r, U+159->r, U+15A->U+15B, U+15B, U+160->s, \
                    U+160->U+161, U+161->s, U+164->t, U+165->t, U+16A->U+16B, U+16B, U+16e->u, \
                    U+16f->u, U+172->U+173, U+173, U+179->U+17A, U+17A, U+17B->U+17C, U+17C, U+17d->z, U+17e->z
}
在源配置中,category属性如下

source post    
{
    # above is the query, config and other attributes
    sql_field_string    = cat_name_attr      # English category
    sql_field_string    = cat_name_attr_fr   # French category
}
还有Yii2中的狮身人面像配置

    'sphinx' => [
        'class' => 'yii\sphinx\Connection',
        'dsn' => 'mysql:host=127.0.0.1;port=9306;',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ],
我尝试为UTF-8排序规则配置所有内容,甚至调用了

json_encode($record, JSON_UNESCAPED_UNICODE) // $records stores the data
但它们没有起作用:'(

已经证实的是,当一个已翻译的类别被索引到sphinx存储中时,它的字符集是change,JSON无法读取。 例如,存储在MySQL表中的“Electrics and Electronics”类别法语翻译如下

“电子与电子”

但当被编入狮身人面像时,它会变成这样

”“是的� et�“电子”

而且该文本不是由json_encode编码的。

黑钻石(�) 是浏览器表示wtf的方式。它来自于有拉丁字母,但告诉浏览器 显示utf8字符

您可以告诉浏览器显示


有时这会与问号一起出现,在这种情况下,您必须重新开始。

您的mysql\u客户端\u编码是什么?我怀疑它不是unicode。请参阅。猜测:Yii2使用的是拉丁语1,而不是utf8。