【问题标题】:Double quote (") + str_replace() for double slash and more than double slash + json_decode() not working when i pass double quote in json value当我在 json 值中传递双引号时,双引号 (") + str_replace() 用于双斜杠和多于双斜杠 + json_decode() 不起作用
【发布时间】:2016-01-21 12:50:26
【问题描述】:

我正在像这样将数据放入 $data

$data=json_decode(str_replace("\\","",$_GET['data']));

这样它会给我空白数据。

如果我这样通过它就会起作用

$data=json_decode($_GET['data']);

但是每次我执行它时,这个东西都会越来越多地添加到我的字符串中。

我在 $_GET['data'] 中传递这样的 json:

[
{
"id":"1",
"about":"about_details",
"biodata":"Always \"happy",
"sharedetails":"\\\\New happening\"",
"fname":"username"
}
]

我不想将双引号 " 删除到我的字符串中,我也想删除双斜杠\\ 。请给我一个更好的解决方案

【问题讨论】:

    标签: php json


    【解决方案1】:

    像这样使用四个斜线

     $data=json_decode(str_replace("\\\\","",$_GET['data']));
    

    这里发生的是你正在逃避你的斜线。本质上,\\ 表示一个斜线,而\\\\ 表示两个斜线。使用三个斜杠的 str_replace 会导致解析错误,因为您正在转义引号。

    工作示例:http://www.tehplayground.com/#1UjQOXT2W

    由于您只指定了一个斜杠 (\\),因此您将替换字符串中每次出现的单个斜杠。这导致

    {"id":"1","about":"about_details","biodata":"总是 "happy","sharedetails":"新发生的事情"","fname":"用户名"}

    注意New发生后的两个引号。这不是一个无法解码的有效 json 字符串

    【讨论】:

    • 根据我的问题,如果我没有将 " 传递给任何值,它将会工作文件,但如果我将它传递给任何值,它将无法工作,因为 str_replace() 如果我将在删除 str_replace 后尝试它将完美运行,但在我的字符串中给我 \\ 更多
    • 您在“新发生”中有一个转义引用。如果从字符串中删除斜杠,它就不会被转义,因此会破坏整个字符串
    • 根据您的建议添加 \\\\ 它会起作用,但它在 " 之前添加了单个 \
    • 所以如果它在 output(") 中只给我双引号而不是好的,这不是正确的解决方案,但它会给我 \"
    猜你喜欢
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2016-12-02
    • 2019-11-29
    • 2019-12-05
    • 1970-01-01
    相关资源
    最近更新 更多