2013-02-26 69 views
3

我有一个包含花(智能?)撇号MySQL数据库(utf8_general_ci)字段:Owner’s...在PHP的json_encode截断之前转义JSON撇号?

这将打印精细,无特殊处理,如果我访问从数据库中拉它的PHP页面。但是,我试图通过另一页上的$ .getJSON请求来访问它,所以我使用了PHP的json_encode。它截断该值,以便它读取Owner,然后成功编码其余数据。如果我在json_encode之前在字段上使用PHP的utf8_encode,它将包含编码为\u0092的完整值,然后它不会在页面上打印任何内容,并给我Owners。 PHP的htmlentitieshtmlspecialchars不起作用。

查看Chrome工具中的请求,Owner’s在$ .getJSON页面上显示为Owner�s

任何人都可以帮助我吗?我已经阅读了关于SO和网络的其他问题,但我找不到任何有用的信息,而且我没有用JSON进行太多的工作。

感谢您的阅读。

+0

'如果我使用PHP的函数utf8_encode在球场上我json_encode之前,它包括与全部价值的“编码为\ u0092'这听起来像这条路看起来不错。你能详细说明这种情况到底失败吗? Chrome的工具看起来如何? – 2013-02-26 19:25:19

+0

我认为你需要为你输出的页面设置编码。另外,您可能需要解码UTF-8。 – crush 2013-02-26 19:40:24

+0

@Pekka:在页面上,“Owner \ 0092s”呈现为“Owners”,在Chrome的Tools中,它看起来像是“Owner \ 0092s”。 @crush,我担心这不是正确转换,因为搜索\ 0092表明它是一个控制字符(?)而不是一个撇号? http://stackoverflow.com/questions/11030851/jquery-parsejson-u0092-character-is-not-parsed – 2013-02-26 19:56:53

回答

6

使用PHP的utf8_encode()之前我json_encode()确实停止从后切断数据,但它也它编码为\0092这并没有显示(控制字符)。当我在查询之前使用MySQL的SET NAMES utf8时,根本没有必要使用utf8_encode(),我的json编码正确,映射到\u2019,这很好地显示。

感谢链接@Pekka,它帮助我缩小了可能性。

+0

在Android或IOS不工作:) – delive 2016-03-22 11:47:09

7

详情:json_encode

例子:

echo json_encode($array, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE); 
+0

不适用于''“撇号! – delive 2016-03-22 11:11:53

+0

@delive您可以与必要的选项'JSON_HEX_QUOT,JSON_HEX_TAG,JSON_HEX_AMP,JSON_HEX_APOS,JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT,JSON_UNESCAPED_SLASHES,JSON_FORCE_OBJECT,JSON_PRESERVE_ZERO_FRACTION,JSON_UNESCAPED_UNICODE,JSON_PARTIAL_OUTPUT_ON_ERROR'尝试:http://php.net/manual/en/function.json- encode.php – itsazzad 2016-03-22 18:38:19