我将PHP服务器中的json_encoded
数据发送到iPhone应用程序。包含html实体的字符串(如'&'
)会被json_encode
转义并以&
形式发送。
我希望做两件事之一:
使json_encode
无法转义html实体。 Doc说'正常'模式不应该逃脱它,但它对我不起作用。有什么想法吗?
让iPhone应用程序以低廉的价格取消html实体。现在我能想到的唯一方法就是开出一个非常昂贵的XML/HTML parser
。任何更便宜的建议?
谢谢!
答案 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 & ۸ 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 & ۸ entities';
echo json_encode($s);
请确保查看此帖子,了解使用此内容类型的更具体原因What is the correct JSON content type?