使用strpos() PHP函數進行資訊檢索與裁切時遇到的問題
P粉692052513
P粉692052513 2023-09-21 10:35:25
0
1
670

我從一個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處停止...

P粉692052513
P粉692052513

全部回覆(1)
P粉598140294

您的$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']);

您將獲得:

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板