PHP json_decode 遇到 Control character error 解法

PHP 使用 json_decode() 遇到下述錯誤訊息:(由 json_last_error_msg() 抓到的訊息)

Control character error, possibly incorrectly encoded

要怎麼解決呢?

PHP json_decode 遇到 Control character error 解法

主要是 Parse 某些程式產生的 Log,然後此 Log 解析後,再經由 json_decode() 遇到,一般把此部份用 Vim 的 hex mode (:%!xxd) 來查看 (通常就是看不到的 ASCII Code),不過這次懶得查看,只想將這些字元直接都過濾掉,可以使用下述作法:

使用 filter_var() + FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW (詳見:PHP: Predefined Constants - Manual)

<?php $line = filter_var($line, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW); ?>
  • 註:FILTER_FLAG_STRIP_LOW:Strip characters with ASCII value less than 32.

範例

<?php
$line = filter_var($line, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW);
print_r(json_decode($line)); // 就可以正常顯示了~
?>

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料