我在使用 strpos() php 裁剪信息时遇到问题

问题描述 投票:0回答:1

我有来自 api 的原始数据,其中包含 JSON,我试图从返回数据中仅裁剪出 Json。我使用 php strpos() 编写了一个函数来裁剪 JSON,从它的开始位置(大括号的开头)到结尾(大括号的结尾)。

但是我遇到一个问题,数据的某些值还包括特殊字符,其中还包括分号,这使得函数无法完全裁剪...

请问有没有更好的方法来解决这个问题?

一些数据的示例是:

$data = {
    "name" : "Full Name",
    "DisplayName":"St Philip\u0026#39;",
    "grade" : "grade",
    "percentage" : 10,
    {"EventName":"Event Name","maxErrors":10}
};

这是我写的函数:

function copyData($data, $param1, $param2)
{
    $start = strpos($data, $param1) + strlen($param1);
    $end = strpos($data, $param2, $start);
    $return = substr($data, $start, $end - $start);
    return $return;
}

所以使用这个函数,它总是停在 DisplayName 处..

php json function request httprequest
1个回答
0
投票

您的 $data 似乎是格式错误的 JSON 字符串。

如果这是由于输入错误造成的,并且 $data 是常规 JSON 字符串,那么我建议您更改策略。

假设正确的 JSON 字符串是:

$data = '{
   "name":"Full Name",
   "DisplayName":"St Philip\u0026#39;",
   "grade":"grade",
   "percentage":10,
   "event":{
      "EventName":"Event Name",
      "maxErrors":10
   }
}';

然后您可以将 JSON 转换为常规 PHP 数组并访问其键:

$decodedData = json_decode ($data, true);
echo $decodedData['DisplayName'];

数据结果为 url 编码字符串:

圣菲利普

如果您需要非 url 编码字符串,只需添加转换:

echo htmlspecialchars_decode($decoded['DisplayName']);

您将获得:

圣菲利普

© www.soinside.com 2019 - 2024. All rights reserved.