2016-03-01 118 views
1

我有一个产品详细信息数组,在product_description字符串我想转义一些特殊字符,如:“,\ ..等但我不知道我该怎么做究竟写的话,我所做的就是:Php转义JSON字符串中的特殊字符

json_encode($array[ProductData][Product_description]); 

但后来当我检查的结果,它给了我关于那些特殊字符错误

这里的产品说明字符串:

30“Apple Cinema HD Display提供..等等

错误在双引号中。

你能帮我解决问题吗?谢谢

+1

您能提供一个产品说明是什么样的例子,也许它给出了确切的错误?这将有助于找出什么是错的。 –

+0

@BrianLogan我已经编辑了这个问题,请检查并协助我,如果可能的话。谢谢 – Alladin

回答

1

您可以

$value = json_encode($array[ProductData][Product_description]); 
    $escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c"); 
    $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b"); 
    $result = str_replace($escapers, $replacements, $value); 

    echo '<pre>'; 
    print_r($result); 
    echo '<pre>'; 

这是尝试

PHP's json_encode does not escape all JSON control characters

+0

我已经试过了,但结果会影响到JSON本身的双引号:而不是**“30”Apple Cinema HD Display提供了..etc“**它给了我这个结果:** \ “30”Apple Cinema HD Display提供了..“** – Alladin

2

你面对的错误是因为"是不是数组中逃脱了参考。它最有可能如下所示:

$array = array(
    "ProductData" => array(
     "ProductName": "Apple Cinema Display", 
     "ProductDescription" => "The 30" Apple Cinema HD Display deliver..etc" 
    ) 
); 

要解决此问题,在你的代码,你应该让它执行以下操作:

$array = array(
    "ProductData" => array(
     "ProductName": "Apple Cinema Display", 
     "ProductDescription" => "The 30\" Apple Cinema HD Display deliver..etc" 
    ) 
); 

如果从数据库中提取,这应该是自动完成。我的建议是,如果您不使用数据库,则需要在需要的地方手动添加反斜杠。由于您很可能在整个字符串周围使用双引号,因此不会有自动添加它们的可靠函数。

+0

我已经尝试了在其他答案中建议的str_replace,但它并不适合我;你是对的,我不从数据库中提取数据。所以通过在需要的地方手动添加反斜杠,就意味着它就像字面上的添加它。因为我有很多产品,其中大多数都有特殊字符。这不是一个有效的方法。 – Alladin

+0

这样做的最好和最简单的方法是使用MySQL(它是免费且开源的)创建一个快速数据库并将数据插入到数据库中。它也可以让你清理你的代码大量。 –