2009-09-16 16 views

Odpowiedz

22

wykorzystanie iconv

$text = iconv("UTF-8", "UTF-8//IGNORE", $text); 

zobaczyć manual.

Cheers

+7

To nie działa dla mnie. nieprawidłowe znaki pozostały. tak jak nie zadziałało dla bobefa. po prostu nie spełnia swojej roli. – Rodniko

+0

To zadziałało dla mnie. Plik źródłowy został pobrany CSV z kodów franczyzowych SBA, które ręcznie sformatowałem do JSON do użycia w siewniku Laravel. Ale mimo że mój sformatowany plik przeszedł walidację JSON, w pliku znajdowały się ukryte, niepoprawne znaki UTF-8, których PHP nie potrafił odszyfrować. – Ixalmida

+0

Jeszcze nie debugowałem szczegółów, ale iconv oraz mb_convert nie rozwiązują problemu z json_encode() Może to pomóc w wielu przypadkach, nie we wszystkich. – John

1

Jeśli natknąć przeklętej błąd „Nieprawidłowy znak” podczas korzystania z XML lub JSON PHP parser następnie może być zainteresowany w tym.

Niestety, parsery PHP i JSON PHP nie ignorują znaków innych niż UTF8, ale raczej przestają wyświetlać niepomyślny błąd. Znalazłem poniższy kod z sieci i działam doskonale dla mnie ..

//reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ? 
$some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'. 
'|[\x00-\x7F][\x80-\xBF]+'. 
'|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'. 
'|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'. 
'|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S', 
'?', $some_string); 

//reject overly long 3 byte sequences and UTF-16 surrogates and replace with ? 
$some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'. 
'|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string); 
+0

nie rozwiązuje problemu z json_encode. zgłasza niektóre ważne UTF8 również jako nieprawidłowe, niestety nie dając pojęcia, co to jest problem. – John

Powiązane problemy