Add replace [:cntrl:] in JSON & error string numb
This commit is contained in:
63
cmpUtil.php
63
cmpUtil.php
@@ -44,24 +44,24 @@
|
||||
return $re;
|
||||
}
|
||||
|
||||
function errorJSON($err) {
|
||||
function errorJSON($err, $f = 2) {
|
||||
switch($err) {
|
||||
case JSON_ERROR_NONE : $this->e('Ошибок нет' , 1); break;
|
||||
case JSON_ERROR_DEPTH : $this->e('Достигнута максимальная глубина стека' , 1); break;
|
||||
case JSON_ERROR_STATE_MISMATCH : $this->e('Некорректные разряды или не совпадение режимов' , 1); break;
|
||||
case JSON_ERROR_CTRL_CHAR : $this->e('Некорректный управляющий символ' , 1); break;
|
||||
case JSON_ERROR_SYNTAX : $this->e('Синтаксическая ошибка, не корректный JSON' , 1); break;
|
||||
case JSON_ERROR_UTF8 : $this->e('Некорректные символы UTF-8, возможно неверная кодировка' , 1); break;
|
||||
case JSON_ERROR_RECURSION : $this->e('Одна или несколько зацикленных ссылок в кодируемом значении' , 1); break;
|
||||
case JSON_ERROR_INF_OR_NAN : $this->e('Одно или несколько значений NAN или INF в кодируемом значении' , 1); break;
|
||||
case JSON_ERROR_UNSUPPORTED_TYPE : $this->e('Передано значение с неподдерживаемым типом' , 1); break;
|
||||
case JSON_ERROR_INVALID_PROPERTY_NAME : $this->e('Имя свойства не может быть закодировано' , 1); break;
|
||||
case JSON_ERROR_UTF16 : $this->e('Некорректный символ UTF-16, возможно некорректно закодирован' , 1); break;
|
||||
default : $this->e('Неизвестная ошибка' , 1); break;
|
||||
case JSON_ERROR_NONE : $this->e('Ошибок нет' , $f); break;
|
||||
case JSON_ERROR_DEPTH : $this->e('Достигнута максимальная глубина стека' , $f); break;
|
||||
case JSON_ERROR_STATE_MISMATCH : $this->e('Некорректные разряды или не совпадение режимов' , $f); break;
|
||||
case JSON_ERROR_CTRL_CHAR : $this->e('Некорректный управляющий символ' , $f); break;
|
||||
case JSON_ERROR_SYNTAX : $this->e('Синтаксическая ошибка, не корректный JSON' , $f); break;
|
||||
case JSON_ERROR_UTF8 : $this->e('Некорректные символы UTF-8, возможно неверная кодировка' , $f); break;
|
||||
case JSON_ERROR_RECURSION : $this->e('Одна или несколько зацикленных ссылок в кодируемом значении' , $f); break;
|
||||
case JSON_ERROR_INF_OR_NAN : $this->e('Одно или несколько значений NAN или INF в кодируемом значении' , $f); break;
|
||||
case JSON_ERROR_UNSUPPORTED_TYPE : $this->e('Передано значение с неподдерживаемым типом' , $f); break;
|
||||
case JSON_ERROR_INVALID_PROPERTY_NAME : $this->e('Имя свойства не может быть закодировано' , $f); break;
|
||||
case JSON_ERROR_UTF16 : $this->e('Некорректный символ UTF-16, возможно некорректно закодирован' , $f); break;
|
||||
default : $this->e('Неизвестная ошибка' , $f); break;
|
||||
}
|
||||
}
|
||||
|
||||
function decodeJSONRaw($str) {
|
||||
function decodeJSONRaw($str, $f = 2) {
|
||||
$obj = json_decode(
|
||||
$str , // string $json
|
||||
true , // ?bool $associative = null
|
||||
@@ -74,11 +74,42 @@
|
||||
if($err === JSON_ERROR_NONE)
|
||||
return $this->toArray($obj);
|
||||
|
||||
$this->errorJSON($err);
|
||||
$this->errorJSON($err, $f + 1);
|
||||
|
||||
$this->d("Invalid JSON: " . $str, $f);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function decodeJSON($str, $d = 0) {
|
||||
$m = array();
|
||||
|
||||
// eq '/[[:cntrl:]]/u';
|
||||
$re = '/[\x00-\x1F\x7F]/u';
|
||||
|
||||
if(preg_match_all($re, $str, $m)) {
|
||||
$tr = array();
|
||||
|
||||
for($i = 0; $i < count($m[0]); $i++) {
|
||||
$bin = $m[0][$i];
|
||||
|
||||
if(isset($tr[$bin]))
|
||||
continue;
|
||||
|
||||
$hex = "0x" . bin2hex($bin);
|
||||
|
||||
$tr[$bin] = $hex;
|
||||
|
||||
if($d)
|
||||
$this->d("decodeJSON: Translate " . $hex);
|
||||
}
|
||||
|
||||
$str = strtr($str, $tr);
|
||||
}
|
||||
|
||||
return $this->decodeJSONRaw($str, 6);
|
||||
}
|
||||
|
||||
function encodeJSON($obj) {
|
||||
$text = json_encode($obj, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||
|
||||
@@ -110,7 +141,7 @@
|
||||
return false;
|
||||
}
|
||||
|
||||
$obj = $this->decodeJSONRaw($raw);
|
||||
$obj = $this->decodeJSON($raw, 1);
|
||||
|
||||
if(!$obj) {
|
||||
$this->e("Invalid JSON '$file'");
|
||||
|
Reference in New Issue
Block a user