json_encode不会编码字符法国(json_encode won't encode F

2019-06-25 06:20发布

我试图与法国字符工作。 无论出于何种原因,PHP将无法正确输出它们,除非我强迫ISO-8859-1字符集(我真的不想做); 它不会让我用UTF-8。

所以做print_r()我的数组的时候我强迫ISO-8859-1产生如下:

Array
(
[0] => stdClass Object
    (
        [language] => fr
        [langselect] => î
        [s1next] => Prochain
        [hascodespan] => Avez-vous déjà un code d'enregistrement?
        [s2prev] => Précédent
        [s2next] => Oui, j'ai déjà un code.
        [ecodedescription] => Un E-Code vous donne un accès exclusif à des événements vraiment cool. Si vous êtes dans le besoin d'un code, vous pouvez en acheter un dans notre boutique en ligne en visitant ce lien <a href="#"> boutique en ligne</ a>.
        [purchase] => Cliquez ici pour acheter en ligne billets
        [ecodespan] => S'il vous plaît entrer votre e-code
        [ecodelocdescription] => Votre code peut être trouvé ci-dessous le code à barres sur votre billet
        [s3prev] => Précédent
        [s3next] => Prochain
        [validationtext] => Validation E-Code ... Un instant.
    )

)

当使用UTF-8,输出为如下:

Array
(
[0] => stdClass Object
    (
        [language] => fr
        [langselect] => �
        [s1next] => Prochain
        [hascodespan] => Avez-vous d�j� un code d'enregistrement?
        [s2prev] => Pr�c�dent
        [s2next] => Oui, j'ai d�j� un code.
        [ecodedescription] => Un E-Code vous donne un acc�s exclusif � des �v�nements vraiment cool. Si vous �tes dans le besoin d'un code, vous pouvez en acheter un dans notre boutique en ligne en visitant ce lien <a href="#"> boutique en ligne</ a>.
        [purchase] => Cliquez ici pour acheter en ligne billets
        [ecodespan] => S'il vous pla�t entrer votre e-code
        [ecodelocdescription] => Votre code peut �tre trouv� ci-dessous le code � barres sur votre billet
        [s3prev] => Pr�c�dent
        [s3next] => Prochain
        [validationtext] => Validation E-Code ... Un instant.
    )

)

在这两种情况下,执行一个json_encode()得到以下结果:

[
    {
        language: "fr",
        langselect: null,
        s1next: "Prochain",
        hascodespan: null,
        s2prev: null,
        s2next: null,
        ecodedescription: null,
        purchase: "Cliquez ici pour acheter en ligne billets",
        ecodespan: null,
        ecodelocdescription: null,
        s3prev: null,
        s3next: "Prochain",
        validationtext: "Validation E-Code ... Un instant."
    }
]

我有我的数据库设置为UTF-8,但出于某种奇怪的原因,我每次插入与法国字符什么时候它本身还原为一些西欧编码。

主要是,我真的需要json_encode()返回有效的结果,所以我可以在我的翻译使用它。 我已经试过iconv()utf8_encode()但无济于事。

任何帮助将不胜感激。

Answer 1:

拜托,除了数据库编码,一定要检查以下内容:

  • 的文件的UTF8编码(JS / PHP)
  • UTF8 html内容: <meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8">
  • 你的数据库连接的UTF8: SET character_set_connection = 'utf8'
  • 你的MySQL表的UTF8: ALTER TABLE table CONVERT TO CHARACTER SET utf8;
  • 查询结果的UTF8: SET character_set_results = 'utf8'
  • 你的数据库客户端的UTF8: SET character_set_client = 'utf8'
  • 你的数据库服务器的UTF8: SET character_set_database = 'utf8'SET character_set_server = 'utf8'
  • 在某些情况下,迫使UTF8文件是在必要的时候进行硬编码值需要编码。 您将需要添加评论比如你的PHP / JS / XML文件的顶部, charset=utf-8所以超编辑或你喜欢的编辑器可以检测到它。

RGDS。



Answer 2:

基本的; 贵PHP文件顶部行了?

标题( “内容类型:文本/ HTML;字符集= UTF8 \ n”);



Answer 3:

我设法弄明白。 这不是真的,我想解决,但它的工作原理。 我不得不调整我的查询看起来像:

CONVERT(CAST(langselect as BINARY) USING latin1) as langselect


Answer 4:

尝试直接在UTF8上源工作。

我面临着同样的问题,并用这种简单的解决方案:当您创建一个新的PHP或JavaScript源文件,确保它在UTF8编码。 我用超编辑,并选择了选项“UTF8没有BOM”。 这个简单的步骤,解决了我的所有问题编码字符。

所有现代浏览器都支持UTF8,所以这种编码您的网页。 出于兼容性考虑,它是简单的,如果所有的源文件也是UTF8。

在此之前,网络标准。



Answer 5:

我遇到了同样的问题,但我建议:

$array = htmlentities($array);
$json = json_encode($array);


文章来源: json_encode won't encode French characters