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)); // 就可以正常顯示了~ ?>