【问题标题】:php utf8_encode - chars get prepended with \uphp utf8_encode - 字符以 \u 开头
【发布时间】:2011-10-07 08:47:55
【问题描述】:

我有一个从数据库中获取的 ISO 字符串,当我对它进行 utf8_encode 时,我得到一个 \u00f6 而不是 Ö。这混淆了 ajaxes 这个 PHP 脚本的 javascript/html。为什么有 \u00f6 而不是 Ö?如何获得 Ö?

编辑: 好的,我做了更多的实验,结果发现这是由 utf8_encode 和 json_encode 的组合引起的。虽然如果我根本不使用 utf8_encode,那么 json 中的值将为 null。

json_encode(array("city"=>utf8_encode("göteborg")))

【问题讨论】:

  • 从你的 ajax 页面粘贴你的 php 代码来进行转换和打印。

标签: php unicode utf-8


【解决方案1】:

utf8_encode 不会将字符编码为\uxxxx,因为您自己发现是json_encode 在执行此操作。这很好,因为 JSON 格式指定了这种行为。如果您的客户端将 JSON 字符串正确解码为 Javascript 数据类型,\uxxxx 转义符将转换为正确的 Unicode 字符。

至于json_encode 如果您的字符串是 Latin1 编码则丢弃字符:手册页上没有明确说明,但 Javascript 和 JSON 完全基于 Unicode,所以我怀疑 Latin1 是用于 JSON 字符串的无效和意外编码,所以它坏了。

【讨论】:

    【解决方案2】:

    你是怎么打印出来的? javascript 原生支持 \uXXXX 编码,并在 javascript 中执行此操作:

    var x = "\u00f6"; alert(x); 
    

    应该打印出一个小的ö。

    编辑:根据您的代码,如果您将其直接输出到响应流并在客户端将实际响应用作 js 中的变量,则根本不应该关心 json_encode。

    您只需通过设置 content-type 标头来告诉浏览器内容是 utf8:

    header('content-type: text/plain;charset=utf8');
    

    然后 jQuery.data() 代码就可以正常工作了。

    【讨论】:

    • 我为它设置了一个 jQuery.data(value) 输入,然后我获取该数据并将其放入一个元素中。我直接在 html 中得到 \u00f6 。奇怪的是,如果我在 PHP 中执行 utf8_encode("$lots of $variables"),我不会得到 \uxxxx,但如果我执行 utf8_encode($variable),我会得到 \uxxxx。
    • 价值是您的 XHR 请求的实际响应吗?我猜想生成的输出(但我不认为它是 utf8_encode 执行的)是要输出到 js-code 的,这意味着 json-serialization 或等效的。因此,如果您只想获取输出并将其放入变量中,则不应对其进行编码。
    • +1。如果您检查json.org,您会看到\u00f6 是代表ö 的有效JSON。此外,它还有一个额外的好处,就是将您的 JSON 响应严格保持在 ASCII 集中。
    • 我更新了我的答案以反映您想要实现的目标,但由于您没有告诉我们您如何获取数据以及您希望如何发送数据,这只是一个猜测。
    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2020-06-28
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多