Originariamente inviato da andr3a
non hai capito ... le specifiche non prevedono al conversione di tutti i caratteri da x00 a xf1 in quel modo
Prova l'espressione regorale che ho scritto prima sui primi 127 caratteri.
Come vedrai dall'output, i caratteri speciali di cui parli restano "intatti" in uscita, e esattamente identici all'output generato da Javascript. I vari \n, \r etc. etc. restano così come sono.
Codice PHP:
$str = '';
for($a = 1; $a < 127; $a++)
$str .= utf8_encode(chr($a));
$str = array($str);
$json = preg_replace('/([\\x{0001}-\\x{001f}])/ue', "'\\u'.sprintf('%04x', ord('$1'))", json_encode($str));
echo $json;
inolte le specifiche prevedono la conversione anche dello slash / (deve diventare \/) e di un altro carattere che non ricordo.
Idem, viene convertito correttamente, come da specifiche.