代码之家  ›  专栏  ›  技术社区  ›  psychotik

获取json_编码以不转义HTML实体

  •  9
  • psychotik  · 技术社区  · 15 年前

    我发送 json_encoded 从我的PHP服务器到iPhone应用程序的数据。包含HTML实体的字符串,如 '&' 被逃脱 json_encode 作为发送 & .

    我想做两件事之一:

    • 制作 詹森编码 不转义HTML实体。医生说“正常”模式不应该逃避它,但它对我不起作用。有什么想法吗?

    • 使iPhone应用程序以较低的成本取消对HTML实体的转义。我现在唯一能想到的方法就是 XML/HTML parser 这很贵。有便宜点的建议吗?

    谢谢!

    4 回复  |  直到 9 年前
        1
  •  8
  •   Artefacto    15 年前

    php 5.3和php 5.2都不接触HTML实体。

    你可以 test 此代码如下:

    <?php
    header("Content-type: text/plain"); //makes sure entities are not interpreted
    $s = 'A string with &amp; &#x6F8 entities';
    echo json_encode($s);
    

    您将看到,PHP唯一做的就是在字符串周围添加双引号。

        2
  •  3
  •   bobince    15 年前

    json_encode 不这样做。您有另一个组件正在进行HTML编码。

    如果您使用 JSON_HEX_ 你可以避免的任何选择 < & 字符出现在输出中(它们将被转换为 \u003C 或类似的JS字符串字面转义),因此可能避免了以下问题:

    json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT)
    

    尽管这将取决于确切知道哪些字符是HTML编码的。可能也有非ASCII字符?

        3
  •  2
  •   kander    15 年前

    基于 manual 似乎json_encode不应该转义您的实体,除非您在php 5.3中明确地告诉它。您是否正在运行旧版本的PHP?

        4
  •  0
  •   Community Mohan Dere    8 年前

    从artefacto的回答出发,我建议使用这个头部,它是专门为JSON数据设计的,而不是仅仅使用纯文本。

    <?php
    header('Content-Type: application/json'); //Also makes sure entities are not interpreted
    $s = 'A string with &amp; &#x6F8 entities';
    echo json_encode($s);
    

    请确保您查看此文章,了解使用此内容类型的更具体原因, What is the correct JSON content type?