Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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 只有变量可以通过引用传递-array\u walk_Php_Json_Utf 8 - Fatal编程技术网

Php 只有变量可以通过引用传递-array\u walk

Php 只有变量可以通过引用传递-array\u walk,php,json,utf-8,Php,Json,Utf 8,我正在尝试从DB表构建JSON,我需要在JSON_encode()之前使用utf8_encode()。我不同意这个错误。 这是一个代码。我做错了什么 <?php $db = new PDO('mysql:host=MY_HOST;dbname=MY_DB;charset=UTF-8', 'MY_LOGIN', 'MY_PASS', array( PDO::ATTR_EMULATE_PREPARES => false, PDO

我正在尝试从DB表构建JSON,我需要在JSON_encode()之前使用utf8_encode()。我不同意这个错误。 这是一个代码。我做错了什么

    <?php
$db = new PDO('mysql:host=MY_HOST;dbname=MY_DB;charset=UTF-8',  
    'MY_LOGIN', 'MY_PASS', array(  
        PDO::ATTR_EMULATE_PREPARES => false,  
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION  
    )  
);    

$stmt = $db->prepare(  
    "SELECT id,title,`fulltext`,catid,publish_state  FROM items WHERE id>:id"  
);  
$stmt->bindValue(':id', 2000, PDO::PARAM_STR);  
$stmt->execute();  
$output_arr = $stmt->fetchAll(PDO::FETCH_ASSOC);

//FOR TEST ONLY
echo 'Output:<br />';
print_r ($output_arr); //prints OK if I remove line 21 (below)

//BEFORE ENCODING TO JSON I NEED TO ENCODE TO UTF-8...
$output_encoded = array_walk(utf8_encode, $output_arr);

//AND NOW I GOT ERROR:
//Only variables can be passed by reference in line 21

//MY NEXT STEP WOULD BE:
echo json_encode($output_encoded)
?>

如果要修复PDO连接字符串,您已经直接从数据库接收到UTF-8编码数据:

$db = new PDO('mysql:host=MY_HOST;dbname=MY_DB;charset=utf8', ...
                                                       ^^^^
该字符集在MySQL中称为“
utf8
”,而不是UTF-8。正确设置此
字符集
参数后,
$stmt->fetchAll(PDO::FETCH_ASSOC)
将返回UTF-8编码数据,根本不需要使用
utf8_编码


至于您的特定问题,您的语法错误,应该是:

array_walk($output_arr, 'utf8_encode')
即使这样也不会有帮助,因为
array\u walk
的回调需要通过引用修改参数,而
utf8\u encode
不需要这样做。您可能打算这样做:

$output_encoded = array_map('utf8_encode', $output_arr);

但即使这样也不正确,因为
$output\u arr
是一个多维数组,在这里无法正确处理。同样,通过修复PDO连接,这是不必要的。事实上,当您的数据库已经返回正确的UTF-8时,不要这样做,它只会篡改您的数据。

array\u walk
return boolean没有人注意到。很好的解释deceze。第一种方法不起作用。字符串在第一个非ASCII字母上被剥离,即使在将字符集更改为utf8之后也是如此。稍后我将检查第二种方法。谢谢