Jak zamienić (użyć wyrażenia regularnego w PHP5) nieprawidłowe znaki w łańcuchu utf-8 na znakach spacji?PHP: zastępuje niepoprawne znaki w łańcuchu utf-8 w
Odpowiedz
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
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
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
iconv nie było pracujących moim przypadku (jak inne rozwiązania), więc znalazłem kopalni tutaj w części dotyczącej "walidacji znak":
Z mbstring co możliwe do:
$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
Działa tak, jak chcesz (zastąp nieprawidłowe znaki białymi spacjami), ale nie działa, jeśli chcesz zastąpić nieprawidłowe znaki czymś innym, np. ?
.
Patrz: Replacing invalid UTF-8 characters by question marks, mbstring.substitute_character seems ignored
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);
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
- 1. PHP, Niepoprawne znaki w dekoderze JSON
- 2. Jak konwertować znaki UTF8 na znaki liczbowe w PHP
- 3. Java zastępuje znaki specjalne
- 4. SQL Server - Niepoprawne znaki w nazwach parametrów
- 5. Ampersand PHP w łańcuchu
- 6. wykryj znaki nie ASCII w łańcuchu znaków
- 7. Jak zamienić znaki w łańcuchu java?
- 8. Czy php wykrywa 4-bajtowe kodowane znaki utf8?
- 9. MySQL - Konwersja znaków latin1 na stole UTF8 w UTF8
- 10. PHP preg_split utf8 znaków
- 11. Odfiltruj liczby w łańcuchu znaków w php
- 12. Jak wykryć niektóre znaki Unicode w łańcuchu w Ruby?
- 13. Jak mogę przetasować znaki w łańcuchu w JavaScript?
- 14. Czy istnieją znaki ograniczające dla znaków UTF8?
- 15. PHP - zastępuje istniejącą funkcję
- 16. jak sprawdzić znaki specjalne php
- 17. Znaki specjalne w UTF8 mailto: subject = link i Outlook
- 18. Jak zamienić zmienną w łańcuchu na PHP?
- 19. jak wykryć hebrajskie znaki zarówno iso8859-8 i utf8 w ciągu znaków przy użyciu php
- 20. Znaki specjalne w PHP/MySQL
- 21. Jak przekonwertować "u00e9" na utf8 char, w mysql lub php?
- 22. PHP mysql problemy charset utf8
- 23. Python - jak pomnożyć znaki w łańcuchu przez liczbę po znaku
- 24. Zastąp wszystkie znaki niebędące cyframi pustą literą w łańcuchu znaków
- 25. Naprawianie uszkodzonego kodowania UTF8
- 26. utf8 w Perlu i MySql
- 27. Jak przekonwertować znaki akcentowane do html w php?
- 28. Escape $ {something} w łańcuchu Kotlina
- 29. Jak zastąpić zmienną w łańcuchu wartością w php?
- 30. PostgreSQL + PHP + UTF8 = niepoprawna sekwencja bajtów do kodowania
Co chcesz zrobić? pozbyć się białej przestrzeni? lub utf-8 znaków? Podaj przykład. –
Pozbycie się znaków UTF-8 jest łatwe: '$ text = '';' :-) – Joey