Hướng dẫn php remove non utf-8 characters - php xóa các ký tự không phải utf-8
Đã hỏi 13 năm, 2 tháng trước 13 years, 2 months ago Đã xem 227k lần 227k times Tôi đang gặp sự cố với việc loại bỏ các ký tự không phải UTF8 khỏi chuỗi, không hiển thị đúng. Các ký tự giống như 0x97 0x61 0x6c 0x6f (biểu diễn hex) Cách tốt nhất để loại bỏ chúng là gì? Biểu thức chính quy hay cái gì khác?
hỏi ngày 9 tháng 9 năm 2009 lúc 18:33Sep 9, 2009 at 18:33
Dan Sosedoffdan SosesoffDan Sosedoff 2.8115 huy hiệu vàng27 Huy hiệu bạc34 Huy hiệu đồng5 gold badges27 silver badges34 bronze badges 3 Nếu bạn áp dụng 5 cho chuỗi UTF8 đã được trả về đầu ra UTF8 bị cắt xén.Tôi đã thực hiện một chức năng giải quyết tất cả các vấn đề này. Nó được gọi là 6.Bạn không cần biết mã hóa chuỗi của bạn là gì. Nó có thể là Latin1 (ISO8859-1), Windows-1252 hoặc UTF8 hoặc chuỗi có thể có hỗn hợp chúng. 6 sẽ chuyển đổi mọi thứ thành UTF8.Tôi đã làm điều đó bởi vì một dịch vụ đã cho tôi một nguồn cấp dữ liệu tất cả đều bị rối, trộn các mã hóa đó trong cùng một chuỗi. Usage:
Tôi đã bao gồm một chức năng khác, mã hóa :: fixutf8 (), sẽ sửa chữa mọi chuỗi UTF8 trông có vẻ bị cắt xén sản phẩm đã được mã hóa thành UTF8 nhiều lần. Usage:
Examples:
sẽ đầu ra:
Download: https://github.com/neitanod/forceutf8
Jason Aller 3,48728 Huy hiệu vàng42 Huy hiệu bạc38 Huy hiệu Đồng28 gold badges42 silver badges38 bronze badges Đã trả lời ngày 19 tháng 8 năm 2010 lúc 11:44Aug 19, 2010 at 11:44
8 Sử dụng phương pháp Regex:
Nó tìm kiếm các trình tự UTF-8 và chụp những chuỗi vào nhóm 1. Nó cũng khớp với các byte đơn không thể được xác định là một phần của chuỗi UTF-8, nhưng không nắm bắt được chúng. Thay thế là bất cứ điều gì được bắt vào nhóm 1. Điều này loại bỏ hiệu quả tất cả các byte không hợp lệ. Có thể sửa chữa chuỗi, bằng cách mã hóa các byte không hợp lệ dưới dạng các ký tự UTF-8. Nhưng nếu các lỗi là ngẫu nhiên, điều này có thể để lại một số biểu tượng lạ.
EDIT:
0 có vẻ là tốt nhất để sử dụng trong trường hợp này.Tôi cũng đã tăng tốc trận đấu một chút. Thay vì khớp với từng ký tự một cách riêng biệt, nó phù hợp với chuỗi các ký tự UTF-8 hợp lệ. Đã trả lời ngày 9 tháng 9 năm 2009 lúc 19:49Sep 9, 2009 at 19:49
Markus Jarderotmarkus JarderotMarkus Jarderot 85K20 Huy hiệu vàng135 Huy hiệu bạc137 Huy hiệu Đồng20 gold badges135 silver badges137 bronze badges 0 Hàm này loại bỏ tất cả các ký tự không phải ASCII, nó hữu ích nhưng không giải quyết được câu hỏi: Đây là chức năng của tôi luôn hoạt động, bất kể mã hóa:
Làm thế nào nó hoạt động:
John 7.2563 huy hiệu vàng49 Huy hiệu bạc51 Huy hiệu đồng3 gold badges49 silver badges51 bronze badges Đã trả lời ngày 20 tháng 11 năm 2013 lúc 17:50Nov 20, 2013 at 17:50
3 thử cái này:
Theo hướng dẫn sử dụng ICONV, hàm sẽ lấy tham số đầu tiên làm ký tự đầu vào, tham số thứ hai làm ký tự đầu ra và thứ ba là chuỗi đầu vào thực tế. Nếu bạn đặt cả ký tự đầu vào và đầu ra thành UTF-8 và nối cờ 5 vào độ chao đầu ra, hàm sẽ giảm (dải) tất cả các ký tự trong chuỗi đầu vào không thể được biểu thị bằng độ chách đầu ra. Do đó, lọc chuỗi đầu vào có hiệu lực.UTF-8, and append the 5 flag to the output charset, the function will drop(strip) all characters in the input string that can't be represented by the output charset. Thus, filtering the input string in effect.
Đã trả lời ngày 17 tháng 12 năm 2014 lúc 15:24Dec 17, 2014 at 15:24
Technoaryatechnoaryatechnoarya 2133 Huy hiệu bạc5 Huy hiệu Đồng3 silver badges5 bronze badges 4 UConverter có thể được sử dụng kể từ PHP 5.5. UConverter là lựa chọn tốt hơn nếu bạn sử dụng tiện ích mở rộng INTL và không sử dụng MBString.
HTMLSpecialchars có thể được sử dụng để loại bỏ chuỗi byte không hợp lệ kể từ Php 5.4. HTMLSpecialchars tốt hơn preg_match để xử lý kích thước lớn của byte và độ chính xác. Rất nhiều việc thực hiện sai bằng cách sử dụng biểu thức chính quy có thể được nhìn thấy. 0Đã trả lời ngày 3 tháng 6 năm 2013 lúc 4:04Jun 3, 2013 at 4:04
Masakielasticmasakielasticmasakielastic 4,4601 Huy hiệu vàng 37 Huy hiệu bạc42 Huy hiệu đồng1 gold badge37 silver badges42 bronze badges 1 Xin chào bạn có thể sử dụng regex đơn giản 1Nó sẽ cắt tất cả các ký tự không phải UTF-8 khỏi chuỗi Đã trả lời ngày 17 tháng 3 năm 2021 lúc 16:09Mar 17, 2021 at 16:09
Hat Inchat incHAT INC Huy hiệu bạc 10115 Huy hiệu đồng1 silver badge5 bronze badges 1 Tôi đã tạo một chức năng xóa các ký tự UTF-8 không hợp lệ khỏi một chuỗi. Tôi đang sử dụng nó để mô tả rõ ràng về 27000 sản phẩm trước khi nó tạo tệp xuất XML. 2
Benrollag 1.2214 huy hiệu vàng16 Huy hiệu bạc21 Huy hiệu đồng4 gold badges16 silver badges21 bronze badges Đã trả lời ngày 16 tháng 7 năm 2014 lúc 23:46Jul 16, 2014 at 23:46
Muminmuminmumin 711 Huy hiệu bạc1 Huy hiệu đồng1 silver badge1 bronze badge 1 Chào mừng bạn đến với năm 2019 và công cụ sửa đổi 6 trong Regex sẽ xử lý các ký tự Multibyte UTF-8 cho bạnNếu bạn chỉ sử dụng 7, bạn vẫn sẽ kết thúc với các ký tự không thể in trong chuỗi của mìnhPhương pháp này sẽ:
method: 3 2 khớp với tất cả các ký tự có thể in và 3 mới và tước mọi thứ khácBạn có thể thấy bảng ASCII bên dưới .. Các ký tự có thể in được từ 32 đến 127, nhưng Newline 3 là một phần của ký tự điều khiển nằm trong khoảng từ 0 đến 31 vì vậy chúng tôi phải thêm dòng mới vào Regex 5Bạn có thể cố gắng gửi các chuỗi qua Regex với các ký tự ngoài phạm vi có thể in như 6 (del), 7 (ESC), v.v. và xem cách chúng bị tước 4https://www.tehplayground.com/q5sJ3FOddhv1atpR
Đã trả lời ngày 10 tháng 9 năm 2019 lúc 13:16Sep 10, 2019 at 13:16
Clarkkclarkkclarkk 26.5K68 Huy hiệu vàng186 Huy hiệu bạc325 Huy hiệu đồng68 gold badges186 silver badges325 bronze badges 3 5Đã trả lời ngày 9 tháng 9 năm 2009 lúc 23:53Sep 9, 2009 at 23:53
AXELALIX AXELALIXAlix Axel 149K92 Huy hiệu vàng390 Huy hiệu bạc496 Huy hiệu Đồng92 gold badges390 silver badges496 bronze badges Subr () có thể phá vỡ các ký tự đa byte của bạn! Trong trường hợp của tôi, tôi đã sử dụng 8 để đảm bảo giá trị do người dùng cung cấp sẽ phù hợp với cơ sở dữ liệu. Thỉnh thoảng nó sẽ chia một ký tự đa byte làm đôi và gây ra lỗi cơ sở dữ liệu với "giá trị chuỗi không chính xác".Bạn có thể sử dụng 9 và có thể ổn đối với MySQL 5, nhưng MySQL 4 đếm byte thay vì các ký tự, vì vậy nó vẫn sẽ quá dài tùy thuộc vào số lượng ký tự đa byte.Để ngăn chặn những vấn đề này, tôi đã thực hiện các bước sau:
Đã trả lời ngày 14 tháng 1 năm 2021 lúc 22:18Jan 14, 2021 at 22:18
Fortefrank FortefrankFrank Forte 1.85718 Huy hiệu bạc18 Huy hiệu đồng18 silver badges18 bronze badges 1 Vì vậy, các quy tắc là octlet UTF-8 đầu tiên có bit cao được đặt làm điểm đánh dấu, và sau đó 1 đến 4 bit để cho biết có bao nhiêu octlet bổ sung; Sau đó, mỗi octlet bổ sung phải có hai bit cao được đặt thành 10. Pseudo-python sẽ là: 6Logic tương tự này phải được dịch sang PHP. Tuy nhiên, không rõ loại tước nào sẽ được thực hiện một khi bạn có được một nhân vật dị dạng. Đã trả lời ngày 9 tháng 9 năm 2009 lúc 18:49Sep 9, 2009 at 18:49
Sẽ sẽWill 72.6K38 Huy hiệu vàng167 Huy hiệu bạc239 Huy hiệu Đồng38 gold badges167 silver badges239 bronze badges 1
Từ bản vá gần đây đến mô -đun phân tích cú pháp JSON của Drupal: 7Nếu bạn lo ngại có, nó giữ lại không gian như các ký tự hợp lệ. Đã làm những gì tôi cần. Nó loại bỏ các ký tự biểu tượng cảm xúc ngày nay không phù hợp với bộ ký tự 'UTF8' của MySQL và điều đó đã cho tôi các lỗi như "SQLSTATE [HY000]: Lỗi chung: 1366 Giá trị chuỗi không chính xác". Để biết chi tiết, xem https://www.drupal.org/node/1824506#comment-6881382 Đã trả lời ngày 25 tháng 6 năm 2015 lúc 3:41Jun 25, 2015 at 3:41
5 Để xóa tất cả các ký tự Unicode bên ngoài mặt phẳng ngôn ngữ cơ bản Unicode: 8
Sam Hanley 4.6647 Huy hiệu vàng36 Huy hiệu bạc60 Huy hiệu Đồng7 gold badges36 silver badges60 bronze badges Đã trả lời ngày 8 tháng 2 năm 2013 lúc 16:55Feb 8, 2013 at 16:55
2 Tôi đã thử nhiều giải pháp được trình bày về chủ đề này, nhưng không có gì trong số chúng làm việc cho tôi, trong trường hợp cụ thể của tôi. Nhưng tôi đã tìm thấy một giải pháp tốt trên liên kết này: https://www.ryadel.com/en/php-skip-invalid-characters-utf-8-xml-file-string/ Về cơ bản, đây là chức năng giải quyết cho tôi: 9Hy vọng nó sẽ giúp một số bạn. Đã trả lời ngày 14 tháng 5 năm 2021 lúc 19:51May 14, 2021 at 19:51
Công việc vệ sinh tiếp theo cho tôi: 0Đã trả lời ngày 26 tháng 5 năm 2021 lúc 11:39May 26, 2021 at 11:39
Adam Peryadam PeryAdam Pery 1.84621 Huy hiệu bạc20 Huy hiệu đồng21 silver badges20 bronze badges Hơi khác với câu hỏi, nhưng những gì tôi đang làm là sử dụng htmlencode (chuỗi), Mã giả ở đây 1đầu vào và đầu ra 2Tôi biết nó không hoàn hảo, nhưng làm công việc cho tôi. Đã trả lời ngày 12 tháng 12 năm 2013 lúc 2:26Dec 12, 2013 at 2:26
Misaximisaximisaxi 5682 Huy hiệu bạc10 Huy hiệu đồng2 silver badges10 bronze badges Có thể không phải là giải pháp chính xác nhất, nhưng nó hoàn thành công việc với một dòng mã duy nhất: 3 1 sẽ chuyển đổi các ký tự thành dấu hỏi; 2 sẽ loại bỏ các dấu hỏi. 2 will strip out the question marks.
סטנל גר TOUR 2.87923 Huy hiệu vàng47 Huy hiệu bạc66 Huy hiệu Đồng23 gold badges47 silver badges66 bronze badges Đã trả lời ngày 26 tháng 12 năm 2019 lúc 17:18Dec 26, 2019 at 17:18
2 4Nó hoạt động trên dịch vụ của chúng tôi Đã trả lời ngày 15 tháng 1 năm 2020 lúc 11:44Jan 15, 2020 at 11:44
llluollluollluo 11 Huy hiệu Đồng1 bronze badge 1 Làm thế nào về ICONV: http://php.net/manual/en/function.iconv.php Không sử dụng nó bên trong bản thân PHP nhưng nó luôn hoạt động tốt cho tôi trên dòng lệnh. Bạn có thể lấy nó để thay thế các ký tự không hợp lệ. Đã trả lời ngày 9 tháng 9 năm 2009 lúc 19:53Sep 9, 2009 at 19:53
BenbenBen 6233 Huy hiệu bạc12 Huy hiệu Đồng3 silver badges12 bronze badges |