Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 json_encode()从输出中排除UTF-8编码字符串_Php_Json_Cakephp_Utf 8 - Fatal编程技术网

Php json_encode()从输出中排除UTF-8编码字符串

Php json_encode()从输出中排除UTF-8编码字符串,php,json,cakephp,utf-8,Php,Json,Cakephp,Utf 8,我使用CakePHP输出一个数组,该数组包含几个UTF-8编码的字符串。我为输出设置了一个布局(这是一个REST API方法): 我的看法是: <?php echo json_encode($items); ?> 我获取数据的数据库表是用utf-8编码的。但是当我输出数据时,如果其中一个元素具有特殊字符,如a、á等,则在JSON数组中字符串将设置为null。如何正确地输出数据?这很可能意味着您的数据没有用UTF-8编码,很可能是因为数据库连接没有设置为UTF-8,而您实际

我使用CakePHP输出一个数组,该数组包含几个UTF-8编码的字符串。我为输出设置了一个布局(这是一个REST API方法):


我的看法是:

<?php echo json_encode($items); ?> 


我获取数据的数据库表是用utf-8编码的。但是当我输出数据时,如果其中一个元素具有特殊字符,如a、á等,则在JSON数组中字符串将设置为null。如何正确地输出数据?

这很可能意味着您的数据没有用UTF-8编码,很可能是因为数据库连接没有设置为UTF-8,而您实际上是在PHP端以拉丁语接收数据。请参阅以获取所有gotchas的详细信息。

这很可能意味着您的数据没有用UTF-8编码,很可能是因为数据库连接没有设置为UTF-8,并且您实际上在PHP端接收到的数据是拉丁文1。有关所有gotchas的详细信息,请参阅。

看起来您的数据库连接没有设置为utf-8,这是最重要的部分。因此,将
'encoding'=>'utf8'
添加到
app/config/database.php
中的数据库配置中,例如:

$items = json_encode( array_map( function($text){ return is_string($text) ? utf8_encode($text) : $text; }, $items) )
echo $items;
    'default' => array(
        'driver'   => 'mysql',
        'host'     => 'YOURHOST',
        'login'    => 'YOURLOGIN',
        'password' => 'YOURPASS',
        'database' => 'YOURDB',
        'encoding' => 'utf8'
    ),

如果未在连接中设置编码,将使用“默认”编码。默认值可能不是utf8。

看起来您的数据库连接没有设置为utf-8,这是最重要的部分。因此,将
'encoding'=>'utf8'
添加到
app/config/database.php
中的数据库配置中,例如:

    'default' => array(
        'driver'   => 'mysql',
        'host'     => 'YOURHOST',
        'login'    => 'YOURLOGIN',
        'password' => 'YOURPASS',
        'database' => 'YOURDB',
        'encoding' => 'utf8'
    ),


如果未在连接中设置编码,将使用“默认”编码。默认值可能不是utf8。

同样的错误,来自数据库的数据是alreadt utf-8编码的。同样的错误,来自数据库的数据是alreadt utf-8编码的。我的数据库表被设置为utf8\u general\u ci,如何正确设置CakePHP?尽管我真的不应该这样做,因为我可能会破坏整个网站(我没有开发它,我只是添加了一个API方法)@Joni只是提供了答案。如果您无法更改默认设置(事实上,如果在没有正确的连接设置的情况下使用该默认设置,那么如果您更改它,您的数据将严重出错),那么您必须手动转换字符串的编码,如其他答案所示。我不知道为什么这对你不起作用。向我们展示其中一个字符串的
bin2hex($string)
,这样我们就可以看到它们似乎采用了什么编码。刚刚做了@Joni所说的更改,现在我得到了带有\u00f3等字符编码的字符串,在视图中它被破坏了,并显示了类似于ó@8vius的内容,因为数据库中的数据已经是垃圾。为什么会在我的链接文章中详细解释…:)在数据库中,如果我在phpMyAdmin中查看它,它会正确显示特殊字符和所有字符。我的数据库表被设置为utf8\u general\u ci,如何正确设置CakePHP?尽管我真的不应该这样做,因为我可能会破坏整个网站(我没有开发它,我只是添加了一个API方法)@Joni只是提供了答案。如果您无法更改默认设置(事实上,如果在没有正确的连接设置的情况下使用该默认设置,那么如果您更改它,您的数据将严重出错),那么您必须手动转换字符串的编码,如其他答案所示。我不知道为什么这对你不起作用。向我们展示其中一个字符串的
bin2hex($string)
,这样我们就可以看到它们似乎采用了什么编码。刚刚做了@Joni所说的更改,现在我得到了带有\u00f3等字符编码的字符串,在视图中它被破坏了,并显示了类似于ó@8vius的内容,因为数据库中的数据已经是垃圾。为什么会在我的链接文章中详细解释…:)在数据库中,如果我在phpMyAdmin中查看它,它会正确地显示特殊字符和所有字符。让我检查一下,尽管有一个问题,一些表被设置为latin1,而另一些表被设置为utf8,这会不会产生一些不一致性?(不要评判我:(我没有设置数据库或站点)刚刚检查,编码设置为utf-8,与utf8有什么区别吗?@8vius MySQL称之为“utf8”,而不是“utf-8”。到目前为止,应用程序一直在使用损坏的编码设置…不会出现任何不一致;MySQL将返回连接编码中的所有文本。
latin1
文本也将以UTF-8格式返回。如果这导致显示错误,请检查您是否已在
config/core.php
中将
App.encoding
设置为UTF-8e> 。它被设置了,我得到了显示错误,就像@deceze的回答中提到的。让我检查一下,虽然有一个问题,一些表被设置为latin1,而另一些表被设置为utf8,这会不会产生一些不一致性?(不要评判我:(我没有设置数据库或站点)刚刚检查过,编码设置为utf-8,与utf8有什么区别吗?@8vius MySQL称之为“utf8”,而不是“utf-8”。到目前为止,应用程序一直在使用损坏的编码设置…不会出现任何不一致;MySQL将返回连接编码中的所有文本。
latin1
文本也将以UTF-8格式返回。如果这导致显示错误,请检查您是否已在
config/core.php
中将
App.encoding
设置为UTF-8e> .设置好了,我得到了显示错误,就像@deceze的回答中提到的那样。