当前位置: 首页 > 面试题库 >

带有特殊字符的Json_decode

乌俊健
2023-03-14
问题内容

我遇到了一个大问题,即通过jQuery Ajax将数据作为JSON发布到我的服务器。JSLint表示数据正常,并且请求的Content-
Type设置为application/x-www-form-urlencoded; charset=UTF-8。服务器在PHP
5.2.11上运行,所以我不能使用json_last_error()

我尝试了url_decode,utf8_decode和html_entities_decode,但似乎没有任何效果。

var_dump(json_decode($jdata));返回null,但如果执行此操作,var_dump($jdata)一切正常。$jdata是发布数据:$jdata = $this->input->post('requestdata');

这是一些从Firebug获取数据的示例:

{
    "projectnumber": "345",
    "projecdescription": "345",
    "articles": [
        {
            "position": 1,
            "article_id": 677,
            "online_text": "3 Behälter; Band I-III nach indiv. Stückliste, Sprache: DE - Sprache: de"
        },
        {
            "position": 2,
            "article_id": 678,
            "online_text": "2 Behälter; Band I-III nach indiv. Stückliste, Sprache: ### - Sprache: en"
        }
    ]
}

编辑:

我现在尝试了这个:

$string = $this->input->post('requestdata');
var_dump($string);
$json = preg_replace('/,\s*([\]}])/m', '$1', utf8_encode($string));
$json = json_decode($json);
var_dump($json);

结果是:

string(338)“ {” projectnumber“:” 4444“,” projecdescription“:” 4444“,”
articles“:[{” position“:1,” article_id“:676,” online_text“:” ###Behälter;
I-III乐队个人。Stückliste,语言:DE-语言:de“},{” position“:2,” article_id“:681,”
online_text“:” ###Behälter; I-III乐队个人。Stückliste,语音:###-语音:en“}]}” NULL

通过将JSON字符串直接粘贴到PHP源代码中,它可以工作,但不能从发布中获取它!


问题答案:

您由于字符串中的新行而出错

$string = '{"projectnumber" : "4444","projecdescription" : "4444", "articles" : [{"position":1, "article_id" : 676, "online_text" : "### Behälter; Band I-III nach indiv. Stückliste, Sprache: DE 
 - Sprache: de"},{"position":2, "article_id" : 681, "online_text" : "### Behälter; Band I-III nach indiv. Stückliste, Sprache: ### 
 - Sprache: en"}]}';


$string = preg_replace("/[\r\n]+/", " ", $string);
$json = utf8_encode($string);
$json = json_decode($json);
var_dump($json);

输出量

object(stdClass)[1]
  public 'projectnumber' => string '4444' (length=4)
  public 'projecdescription' => string '4444' (length=4)
  public 'articles' => 
    array
      0 => 
        object(stdClass)[2]
          public 'position' => int 1
          public 'article_id' => int 676
          public 'online_text' => string '### Behälter; Band I-III nach indiv. Stückliste, Sprache: DE   - Sprache: de' (length=78)
      1 => 
        object(stdClass)[3]
          public 'position' => int 2
          public 'article_id' => int 681
          public 'online_text' => string '### Behälter; Band I-III nach indiv. Stückliste, Sprache: ###   - Sprache: en' (length=79)


 类似资料:
  • 问题内容: 我正在开发一个使用jQuery,PHP和JSON作为响应的依赖选择脚本。 除了使用特殊字符(如法语(é,è,à…))外,其他所有内容都运行良好 如果我像(é,è和à)那样对它们进行预编码(这里我在&符和单词的其余部分之间使用空格以防止在我的问题中进行自动编码)它可以工作,但是当使用jquery渲染字符时不会转换为应具有的外观(é…),而是按原样

  • 问题内容: 我们需要从Typescript中的node.js代码中调用REST API,并希望具有用于请求和响应的相应类型。不幸的是,给定接口的JSON包含以下字段: 我们被告知,这是由于另一端的自动化“ JSONifier”的局限性而无法更改的。我们如何设置适合于此的接口?以下显然不起作用: 问题答案: 就像JS对象一样,您可以用引号将名称引起来,如下所示:

  • 我正在使用https://www.npmjs.com/package/bad-words我为过滤特殊字符创建了正则表达式。 如果单词不包含土耳其语字符,它可以工作。但是如果我写土耳其语字符,如或,这不是过滤。 我的正则表达式错了吗? 我在文档中发现了以下代码:

  • 我有一个集合的联系人结构如下: 因为“susan@xpto.com”上的点 如何逃脱这点? 我尝试了和但没有成功。

  • 我使用从. env文件中导出所有变量。不幸的是,一个变量包含,因此会导致语法错误。有没有用上述命令解决这个问题的方法?我知道可以将其设置在括号中,但是. env在某种程度上是自动生成的,没有括号。 例如,Dotenv看起来像这样:

  • 我在从AWS下载上面的文件时遇到了一些麻烦。我试图用CouldBerry Explore和Java下载这个文件,但失败了。aws文档说我需要特殊的处理。(https://docs.aws.amazon.com/amazons3/latest/dev/usingmetadata.html)那么,你能告诉我如何用“:”下载这个文件吗? 以下是我的文件信息。 文件名:“E:\home\temp\test