【问题标题】:json_encode won't encode French charactersjson_encode 不会编码法语字符
【发布时间】:2012-06-11 01:24:24
【问题描述】:

我正在尝试使用法语字符。无论出于何种原因,PHP 都不会正确输出它们,除非我强制使用 ISO-8859-1 字符集(我真的不想这样做);它不会让我使用 UTF-8。

所以当我强制 ISO-8859-1 时对我的数组执行 print_r() 会产生以下结果:

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(),但无济于事。

任何帮助都会非常感谢

【问题讨论】:

    标签: php json encoding utf-8


    【解决方案1】:

    除了数据库编码,请务必检查以下内容:

    • 文件的utf8编码(js/php)
    • utf8 html内容:&lt;meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=utf-8"&gt;
    • 你的数据库连接的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.

    【讨论】:

      【解决方案2】:

      基本的;你的 .php 文件在最上面吗?

      header("content-type:text/html;charset=utf8\n");

      【讨论】:

        【解决方案3】:

        我设法弄明白了。这不是我真正想要的解决方案,但它确实有效。我不得不调整我的查询看起来像:

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

        【讨论】:

          【解决方案4】:

          尝试直接在 utf8 中处理源代码。

          我遇到了同样的问题,并使用了这个简单的解决方案:当您创建一个新的 PHP 或 Javascript 源文件时,确保它以 utf8 编码。 我使用 Ultra Edit,并选择了“UTF8 no bom”选项。这个简单的步骤解决了我编码字符的所有问题。

          所有现代浏览器都支持 utf8,因此请使用此编码您的网页。为了兼容性,如果你所有的源文件也是 utf8 格式会更简单。

          这遵循网络标准。

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              猜你喜欢
              • 2013-11-18
              • 1970-01-01
              • 2011-02-16
              • 2014-09-27
              • 1970-01-01
              • 1970-01-01
              • 2015-10-21
              • 2017-04-09
              • 2015-06-04
              相关资源
              最近更新 更多