让json_encode不能逃脱html实体

时间:2010-07-27 17:35:42

标签: php iphone objective-c cocoa json

我将PHP服务器中的json_encoded数据发送到iPhone应用程序。包含html实体的字符串(如'&')会被json_encode转义并以&形式发送。

我希望做两件事之一:

  • 使json_encode无法转义html实体。 Doc说'正常'模式不应该逃脱它,但它对我不起作用。有什么想法吗?

  • 让iPhone应用程序以低廉的价格取消html实体。现在我能想到的唯一方法就是开出一个非常昂贵的XML/HTML parser。任何更便宜的建议?

谢谢!

4 个答案:

答案 0 :(得分:8)

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唯一能做的就是在字符串周围添加双引号。

答案 1 :(得分:3)

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

如果您使用JSON_HEX_选项,则可以避免输出中出现任何<&字符(它们会转换为\u003C或类似的JS字符串文字逃脱),因此可能避免这个问题:

json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT)

虽然这取决于确切知道哪些字符在下游进行HTML编码。也许是非ASCII字符?

答案 2 :(得分:2)

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

答案 3 :(得分:0)

关于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?