首頁  >  問答  >  主體

使用strpos() PHP函數進行資訊檢索與裁切時遇到的問題

我從一個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粉692052513P粉692052513364 天前577

全部回覆(1)我來回復

  • P粉598140294

    P粉5981402942023-09-22 00:33:25

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

    您將獲得:

    回覆
    0
  • 取消回覆