Hướng dẫn dùng u 00a0 trong PHP

[Được chuyển từ một Q trùng lặp về các trimcuộc đấu tranh với NBSP.] Các ghi chú sau đây hợp lệ với PHP 7.2+. Dặm có thể thay đổi với các phiên bản trước đó [vui lòng báo cáo trong phần bình luận].

PHP trimbỏ qua các khoảng trắng không ngắt. Nó chỉ cắt các khoảng trắng được tìm thấy trong phạm vi ASCII cơ bản. Để tham khảo, mã nguồn cho trim đọc như sau [nghĩa là không có tính năng không có tài liệu với trim]:

[c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == '\v' || c == '\0']

Trong số trên, ngoài khoảng trắng thông thường [ASCII 32, ], đây là tất cả các ký tự điều khiển ASCII; LF [10 \n:], CR [13 \r:], HT [9 \t:], VT [11 \v:], NUL [0 \0:]. [Lưu ý rằng trong PHP, bạn phải trích dẫn kép các ký tự thoát: "\n", "\t"vv .. Nếu không chúng được phân tích cú pháp thành chữ, \nv.v.]

Sau đây là những hiện thực đơn giản trong ba hương vị của trim[ ltrim, rtrim, trim], sử dụng preg_replace, mà làm việc với chuỗi Unicode:

preg_replace['~^\s+~u', '', $string] // == ltrim preg_replace['~\s+$~u', '', $string] // == rtrim preg_replace['~^\s+|\s+$~us', '', $string] // == trim

Hãy thoải mái gói chúng vào các mb_*trimchức năng của riêng bạn .

Theo thông số kỹ thuật PCRE , \ský tự chuỗi thoát "bất kỳ khoảng trắng nào" khi bật uchế độ Unicode sẽ khớp với tất cả các ký tự khoảng trắng sau:

The horizontal space characters are: U+0009 Horizontal tab [HT] U+0020 Space U+00A0 Non-break space U+1680 Ogham space mark U+180E Mongolian vowel separator U+2000 En quad U+2001 Em quad U+2002 En space U+2003 Em space U+2004 Three-per-em space U+2005 Four-per-em space U+2006 Six-per-em space U+2007 Figure space U+2008 Punctuation space U+2009 Thin space U+200A Hair space U+202F Narrow no-break space U+205F Medium mathematical space U+3000 Ideographic space The vertical space characters are: U+000A Linefeed [LF] U+000B Vertical tab [VT] U+000C Form feed [FF] U+000D Carriage return [CR] U+0085 Next line [NEL] U+2028 Line separator U+2029 Paragraph separator

Bạn có thể thấy một sự lặp lại thử nghiệm của preg_replacevới ucờ Unicode giải quyết tất cả các không gian được liệt kê. Tất cả chúng đều được cắt tỉa như mong đợi, tuân theo thông số kỹ thuật của PCRE. Nếu bạn chỉ nhắm mục tiêu các không gian ngang ở trên, \hsẽ đối sánh chúng, cũng như \vvới tất cả các không gian dọc.

Việc sử dụng \p{Z}saw trong một số câu trả lời sẽ không thành công trong một số lần đếm; đặc biệt, với hầu hết các khoảng trắng ASCII, và đáng ngạc nhiên là cả với dấu phân tách nguyên âm tiếng Mông Cổ. Hốt Tất Liệt sẽ rất tức giận. Đây là danh sách các lỗi bỏ sót với \p{Z}: U + 0009 Tab ngang [HT] , U + 000A Linefeed [LF] , U + 000C Form feed [FF] , U + 000D Carriage return [CR] , U + 0085 Dòng tiếp theo [NEL] , và dấu phân tách nguyên âm tiếng Mông Cổ U + 180E .

Về lý do tại sao điều đó xảy ra, thông số kỹ thuật PCRE ở trên cũng lưu ý: " \s bất kỳ ký tự nào khớp \p{Z}hoặc \hhoặc\v ". Đó là, \slà một tập hợp siêu của \p{Z}. Sau đó, chỉ cần sử dụng \sthay cho \p{Z}. Nó toàn diện hơn và việc nhập sẽ rõ ràng hơn ngay lập tức đối với ai đó đang đọc mã của bạn, những người có thể không nhớ các ký tự rút gọn cho tất cả các loại ký tự.

1 hữu ích 0 bình luận chia sẻ

Chủ Đề