Một biểu thức chính quy không tính đến các ký tự UTF-8 theo mặc định. \s
Meta-saracter chỉ chiếm bộ Latin ban đầu. Do đó, lệnh sau chỉ loại bỏ các tab, khoảng trắng, trả về vận chuyển và dòng mới
// //stackoverflow.com/a/1279798/54964
$str=preg_replace['/\s+/', '', $str];
Với UTF-8 trở thành chủ đạo, biểu thức này sẽ thường xuyên thất bại hơn khi đạt đến các ký tự UTF-8 mới, để lại không gian trắng phía sau mà \s
không thể tính đến.
Để đối phó với các loại không gian trắng mới được giới thiệu trong Unicode/UTF-8, một chuỗi rộng hơn được yêu cầu để phù hợp và loại bỏ không gian trắng hiện đại.
Bởi vì các biểu thức thông thường theo mặc định không nhận ra các ký tự đa byte, chỉ có thể sử dụng chuỗi meta được phân định để xác định chúng, để ngăn các phân đoạn byte bị thay đổi trong các ký tự UTF-8 khác [\x80
trong bộ Quad có thể thay thế tất cả -Bytes trong trích dẫn thông minh]
$cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
Điều này chiếm và loại bỏ các tab, newlines, tab dọc, formfeed, trả về vận chuyển, không gian và ngoài ra từ đây:
NEXTLINE, không gian không phá vỡ, phân tách nguyên âm Mông Cổ, [EN Quad, Em Quad, EN Space, EM Space, không gian ba trên Per-EM, không gian bốn trên Per-EM, không gian sáu trên mỗi lần , không gian mỏng, không gian tóc, không gian chiều rộng bằng không, không có chiều rộng không joiner, máy nối không rộng bằng không], bộ tách đường, phân tách đoạn văn, không gian không phá vỡ hẹp, không gian toán học trung bình, người tham gia từ, không gian biểu tượng và không gian không chiều rộng không Phá vỡ không gian.
Nhiều trong số các tệp XML này bị tàn phá trong các tệp XML khi xuất từ các công cụ hoặc trang web tự động làm hỏng các tìm kiếm, nhận dạng và có thể được dán vào mã nguồn PHP khiến trình phân tích cú pháp chuyển sang lệnh tiếp theo [đoạn phân tách đoạn và dòng] mã sẽ được bỏ qua dẫn đến các lỗi không thể giải thích được, không giải thích được mà chúng tôi đã bắt đầu gọi là "các bệnh truyền qua văn bản"
[Không an toàn để sao chép và dán từ web nữa. Sử dụng máy quét ký tự để bảo vệ mã của bạn. cười lớn]
Chủ đề: PHP / mysqlprev | Tiếp theoPrev|Next
Trả lời: Sử dụng chức năng Php ____10
Bạn có thể chỉ cần sử dụng chức năng PHP
$cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
0 để tước hoặc xóa tất cả các khoảng trống bên trong một chuỗi.Chúng ta hãy xem ví dụ sau để xem nó thực sự hoạt động như thế nào:
Tuy nhiên, ví dụ trên sẽ chỉ loại bỏ không gian. Nếu bạn muốn xóa tất cả các không gian trắng bao gồm các tab, newlines, v.v., bạn có thể sử dụng chức năng
$cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
2 thực hiện tìm kiếm và thay thế biểu thức thông thường, như đã được trình bày trong ví dụ sau:
Trong ví dụ trên
$cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
3 đại diện cho ký tự tab, trong khi $cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
4 đại diện cho ký tự dòng mới.Để tìm hiểu thêm về biểu thức chính quy, hãy xem hướng dẫn về các biểu thức thông thường PHP.
Câu hỏi thường gặp liên quan
Dưới đây là một số Câu hỏi thường gặp liên quan đến chủ đề này:
- Cách trích xuất chuỗi con từ một chuỗi trong PHP
- Cách kết hợp hai chuỗi trong PHP
- Cách chuyển đổi chuỗi thành chữ hoa trong PHP
[Php 4, Php 5, Php 7, Php 8]
Cắt - dải trắng [hoặc các ký tự khác] từ đầu và cuối chuỗi — Strip whitespace [or other characters] from the beginning and end of a string
Sự mô tả
Trim [Chuỗi
5, Chuỗi $cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
6 = "\ n \ r \ t \ v \ x00"]: Chuỗi[string $cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
5, string $cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
6 = " \n\r\t\v\x00"]: string$cleanedstr = preg_replace[
"/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/",
"_",
$str
];
- "" [ASCII
7 [$cleanedstr = preg_replace[ "/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/", "_", $str ];
8]], một không gian thông thường.$cleanedstr = preg_replace[ "/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/", "_", $str ];
- "\ t" [ASCII
9 [$cleanedstr = preg_replace[ "/[\t|\n|\v|\f|\r| |\xC2\x85|\xc2\xa0|\xe1\xa0\x8e|\xe2\x80[\x80-\x8D]|\xe2\x80\xa8|\xe2\x80\xa9|\xe2\x80\xaF|\xe2\x81\x9f|\xe2\x81\xa0|\xe3\x80\x80|\xef\xbb\xbf]+/", "_", $str ];
0]], một tab. - "\ n" [ASCII
1 [
2]], một dòng mới [nguồn cấp dữ liệu]. - "\ r" [ASCII
3 [
4]], trả lại vận chuyển. - "\ 0" [ASCII
5 [
6]], ________ 27-byte. - "\ V" [ASCII
8 [
9]], một tab dọc.
Thông số
0Chuỗi sẽ được cắt tỉa.string that will be trimmed.
1Tùy chọn, các ký tự bị tước cũng có thể được chỉ định bằng tham số
1. Chỉ cần liệt kê tất cả các ký tự mà bạn muốn bị tước. Với
3, bạn có thể chỉ định một loạt các ký tự.Trả về giá trị
Chuỗi được cắt.
Ví dụ
Ví dụ #1 Ví dụ sử dụng của Trim []trim[]
4
5
6Ví dụ trên sẽ xuất ra:
string[32] " These are a few words :] ... " string[16] " Example string " string[11] "Hello World" string[28] "These are a few words :] ..." string[24] "These are a few words :]" string[5] "o Wor" string[9] "ello Worl" string[14] "Example string"
Ví dụ #2 Các giá trị mảng cắt bằng trang trí []trim[]
7Ví dụ trên sẽ xuất ra:
array[3] { [0]=> string[5] "apple" [1]=> string[7] "banana " [2]=> string[11] " cranberry " } array[3] { [0]=> string[5] "apple" [1]=> string[6] "banana" [2]=> string[9] "cranberry" }
Ví dụ #2 Các giá trị mảng cắt bằng trang trí []
Ghi chú: Possible gotcha: removing middle characters
Lưu ý: Có thể Gotcha: Xóa các ký tự giữatrim[] trims characters from the beginning and end of a string, it may be confusing when characters are [or are not] removed from the middle.
8 removes both 'a' and 'b' because it trims 'a' thus moving 'b' to the beginning to also be trimmed. So, this is why it "works" whereas9 seemingly does not.
Bởi vì Trim [] cắt các ký tự từ đầu và cuối chuỗi, nó có thể gây nhầm lẫn khi các ký tự [hoặc không] bị xóa khỏi giữa.
8 loại bỏ cả 'A' và 'B' vì nó cắt 'do' di chuyển 'B' đến đầu cũng được cắt tỉa. Vì vậy, đây là lý do tại sao nó "hoạt động" trong khi
9 dường như không.
- Xem thêm
- LTRIM [] - Dải khoảng trắng [hoặc các ký tự khác] từ đầu chuỗi
- rtrim [] - dải trắng [hoặc các ký tự khác] từ cuối chuỗi
str_replace [] - Thay thế tất cả các lần xuất hiện của chuỗi tìm kiếm bằng chuỗi thay thế