PHP json_编码json_解码UTF-8

PHP json_编码json_解码UTF-8,php,utf-8,json,Php,Utf 8,Json,如何将带有国际字符的json编码字符串保存到数据库中,然后在浏览器中解析解码后的字符串 <?php $string = "très agréable"; // to the database $j_encoded = json_encode(utf8_encode($string)); // get from Database $j_decoded = json_decode($j_encoded); ?>

如何将带有国际字符的json编码字符串保存到数据库中,然后在浏览器中解析解码后的字符串

<?php           
    $string = "très agréable";  
    // to the database 
    $j_encoded = json_encode(utf8_encode($string)); 
    // get from Database 
    $j_decoded = json_decode($j_encoded); 
?>    
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <?= $j_decoded ?>
</html> 

  • $j_decoded=utf8_解码(json_解码($j_编码))编辑
    或者更准确地说,
    $j_encoded=json_encode($j_encoded)
    $j_decoded=json_decode($j_encoded)无需en/解码utf8

  • 这是一个编码问题。看起来在某一点上,数据被表示为ISO-8859-1

    流程的每个部分都需要UTF-8编码

    • 数据库连接

    • 数据库表

    • 您的PHP文件(如果您在该文件中使用特殊字符,如上面的示例所示)

    • 您输出的
      内容类型
      标题


    如果源文件已经是utf8,则删除utf8函数。 php5将字符串存储为字节数组

    您应该为html中的编码添加一个元标记,并且应该添加一个http头,该头将Transferncode设置为utf-8

    <html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    
    
    
    在php中

    <?php
    header('Content-Type: text/html; charset=utf-8');
    

    尝试发送UTF-8字符集头:

    <?php header ('Content-type: text/html; charset=utf-8'); ?>
    
    
    
    以及HTML元数据:

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    

    json utf8编码和解码:

    json_encode($data, JSON_UNESCAPED_UNICODE)
    
    json_decode($json, false, 512, JSON_UNESCAPED_UNICODE)
    
    强制utf8也可能有帮助:

    如果出现“意外字符”错误,则应检查是否有BOM(字节顺序标记)保存到utf-8 json中。 您可以删除第一个字符,如果没有BOM,也可以保存。

    为我工作:)

    对我来说,这两种方法都适用

    <?php
    
    header('Content-Type: text/html; charset=utf-8');
    
    echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
    

    我也有同样的问题。这可能因您将数据放入数据库的方式而异,但请尝试适合我的方法:

    $str = json_encode($data);
    $str = addslashes($str);
    

    在将数据保存到数据库之前,请执行此操作。

    与您显示的方式基本相同。什么不起作用?它给我:très agrƒ©请尝试将页面的字符集设置为UTF-8。。。在block@Mark,但只有在使用$j_encoded=json_encode($string)时才起作用;因此,如果没有utf8_encode()@FFish,请去掉代码中的
    utf8_encode()
    ,我刚才看到了(编辑:啊,您更快)为什么在UTF-8环境中需要
    utf8_decode()
    (转换为ISO-8859-1)?好的,我明白了。我还需要utf8\u解码()。。utf8_解码(json_解码($j_编码))和json_解码(utf8_解码($j_编码))有区别吗?是的,正确的说,无论如何你不应该使用
    utf8_编码。但你使用它的方式是点。1您先对utf8编码,然后对json编码,因此为了获得输入,您必须先对json进行解码,然后utf8@Pekka如果您仍然搞砸了编码(请参阅
    utf8\u编码
    ),您必须纠正它。好的,不要搞砸了编码也是一个解决方案,我编辑了我的答案,以反映我认为这是最好的答案,我需要检查我的DB编码!您可以添加完成所有这些所需的代码。为什么要给出负号?我有足够的情况下,这是唯一的工作方式。不要告诉我所有关于文件编码、数据库编码等的事情。有些情况下,您不知道资源的编码,而且是随机的。一些utf8,一些你能想象得到的任何其他东西。唯一对我有效的东西,我正在构建一个API,我需要用编码的字符Hanks Lukas将响应纯打印为json,这正是我想要的。它将诸如
    \u00e9
    之类的编码转换为
    é
    。我刚刚确认了它的用途。不过我还是很好奇,
    depth
    参数真的有用吗?如果递归在某个深度停止,是否意味着json不会根据位掩码进行完全en/解码?另请参见,使用
    json_UNESCAPED_UNICODE | json_UNESCAPED_SLASHES
    谢谢,这为我指明了方向,只不过一开始会让事情变得更糟!)然后我意识到这是因为在堆栈中的某个更深的地方有一些明显的“过度编码”,所以-也许很奇怪-将
    utf8\u编码更改为
    utf8\u解码解决了这个问题。
    
    <?php
    
    header('Content-Type: text/html; charset=utf-8');
    
    echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
    
    $str = json_encode($data);
    $str = addslashes($str);