Làm cách nào thay thế (sử dụng regex trong PHP5) các ký tự không hợp lệ trong chuỗi utf-8 trên các ký tự khoảng trắng?PHP: thay thế các ký tự không hợp lệ trong chuỗi utf-8 trong
Trả lời
Điều này không hiệu quả đối với tôi. ký tự không hợp lệ được giữ nguyên. giống như nó không hoạt động cho bobef. nó không thực hiện công việc. – Rodniko
Điều này làm việc cho tôi. Tệp nguồn đã được tải xuống mã CSV của các mã nhượng quyền SBA, mà tôi đã định dạng theo cách thủ công thành JSON được sử dụng trong trình tạo giống Laravel. Nhưng mặc dù tệp được định dạng của tôi đã thông qua xác thực JSON, nhưng các ký tự UTF-8 bị ẩn, không hợp lệ vẫn nằm trong tệp mà PHP không thể giải mã được. – Ixalmida
Tôi chưa được gỡ lỗi vào chi tiết nhưng biểu tượngv cũng như mb_convert không giải quyết vấn đề với json_encode() Nó có thể giúp ích trong nhiều trường hợp, không phải trong tất cả. – John
Các iconv không hoạt động trường hợp của tôi (như các giải pháp khác) vì vậy tôi tìm thấy tôi ở đây một phần cho "xác nhận nhân vật":
Với mbstring bạn có thể làm:
$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
Sẽ hoạt động khi bạn muốn (thay thế các ký tự không hợp lệ bởi khoảng trắng), nhưng dường như không hoạt động nếu bạn muốn thay thế các ký tự không hợp lệ bằng một số ký tự khác, chẳng hạn như ?
.
Xem: Replacing invalid UTF-8 characters by question marks, mbstring.substitute_character seems ignored
Nếu bạn đã đi qua những lỗi ‘nhân vật không hợp lệ’ nguyền rủa trong khi sử dụng XML PHP hoặc JSON phân tích cú pháp sau đó bạn có thể quan tâm đến việc này.
Thật không may, các trình phân tích cú pháp XML và JSON của PHP không bỏ qua các ký tự không phải UTF8, mà là chúng dừng lại và ném một lỗi khá vô ích. Tôi đã tìm thấy biểu mẫu mã dưới đây và hoạt động xuất sắc cho tôi ..
//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);
không giải quyết vấn đề với json_encode. nó báo cáo một số UTF8 hợp lệ cũng là không hợp lệ, đáng buồn mà không đưa ra một đầu mối vấn đề là gì. – John
- 1. Thay thế các ký tự không hợp lệ của một chuỗi có ký tự không hợp lệ
- 2. Regex để thay thế các ký tự không hợp lệ
- 3. Thay thế chuỗi ký tự trong java
- 4. Các ký tự không hợp lệ trong phản hồi JSON
- 5. Tước các ký tự XML không hợp lệ trong Java
- 6. Làm thế nào để cắt ngắn chuỗi UTF8 trong PHP?
- 7. PHP, Các ký tự không hợp lệ trong giải mã JSON
- 8. Ngoại lệ XML: (các) ký tự không hợp lệ
- 9. Chuyển đổi các ký tự utf8 thành iso-88591 và ngược lại trong PHP
- 10. Các ký tự không hợp lệ XML trong đường dẫn
- 11. Ký tự nào hợp lệ trong URL?
- 12. Base64 Chuỗi ném lỗi ký tự không hợp lệ
- 13. Ký tự không hợp lệ trong tiêu đề HTTP
- 14. Các ký tự hợp lệ PDO cho trình giữ chỗ
- 15. Thay thế nhiều ký tự trong một chuỗi (XSLT)
- 16. Làm cách nào để tách các ký tự không hợp lệ khỏi chuỗi trong JS?
- 17. Xóa các ký tự URL không hợp lệ bằng JavaScript
- 18. Những ký tự nào hợp lệ/không hợp lệ trong tên khóa JSON?
- 19. Thay thế một ký tự của một chuỗi trong python
- 20. Kết hợp các chuỗi ký tự
- 21. Lỗi trong chuỗi (multibyte không hợp lệ)
- 22. ký tự không hợp lệ trong tài liệu xml
- 23. Smarty: các ký tự đặc biệt được thay đổi không mong muốn- utf8
- 24. nmake - ký tự không hợp lệ '{' trong macro
- 25. Thay thế một ký tự bằng một ký tự khác trong một chuỗi trong android?
- 26. Mã hóa ký tự và chuỗi ký tự trong C++
- 27. Javascript - Thay thế ký tự thoát trong một chuỗi chữ
- 28. R - đếm các kết hợp giữa các ký tự của một chuỗi và chuỗi khác, không thay thế
- 29. Regex để loại bỏ các ký tự không phải chữ và số từ các chuỗi UTF8
- 30. chuỗi thay thế trên ký tự thoát
Bạn muốn làm gì? thoát khỏi không gian màu trắng? hoặc utf-8 ký tự? Đưa ra một ví dụ. –
loại bỏ các ký tự UTF-8 thật dễ dàng: '$ text = '';' :-) – Joey