Cách xóa ký tự thoát khỏi chuỗi trong php

Bạn có thể đạt được hiệu ứng tương tự trong các chuỗi trích dẫn kép bằng cách sử dụng ký tự thoát, trong PHP, là dấu gạch chéo ngược \

Chuỗi thoát, sự kết hợp của ký tự thoát \ và một chữ cái, được sử dụng để biểu thị rằng ký tự sau ký tự thoát cần được xử lý đặc biệt. Ví dụ: nếu bạn muốn có chuỗi "Và sau đó anh ấy nói," Điều đó thật tuyệt vời. ", đó là sự thật", bạn sẽ cần các ký tự thoát vì bạn có dấu ngoặc kép bên trong dấu ngoặc kép. Đây là danh sách các chuỗi thoát trong PHP

\"

In ký tự tiếp theo dưới dạng trích dẫn kép, không phải chuỗi gần hơn

\'

In ký tự tiếp theo dưới dạng một trích dẫn đơn, không phải là một chuỗi gần hơn

\N

In một ký tự dòng mới (nhớ câu lệnh in của chúng tôi?)

\t

In ký tự tab

\ r

In dấu xuống dòng (không được sử dụng thường xuyên)

\$

In ký tự tiếp theo dưới dạng đô la, không phải là một phần của biến

\\

In ký tự tiếp theo dưới dạng dấu gạch chéo ngược, không phải ký tự thoát

Dưới đây là một ví dụ mã về các chuỗi thoát này đang hoạt động


Việc quên thoát đúng các đường dẫn hệ thống tệp kiểu Windows là điều đặc biệt phổ biến, nhưng như bạn có thể thấy, vấn đề chỉ đơn giản là thêm nhiều dấu gạch chéo ngược vào đó. Nếu bạn in $MyFile, bạn sẽ nhận được cái này

c:\windows\system32\myfile.txt

Điều này là do các ký tự thoát chỉ để đảm bảo PHP có thể đọc chuỗi chính xác - một khi dữ liệu đã được đọc, nó sẽ được chuyển đổi thành định dạng ban đầu

Đồng thời, các chuỗi thoát chỉ hoạt động trong các chuỗi được trích dẫn kép - nếu bạn nhập 'Xin chào. \n\n\n', PHP sẽ thực sự in ra các ký tự \n\n\n thay vì chuyển đổi chúng thành các dòng mới. Điều quan trọng cần lưu ý là bản thân các ký tự thoát chỉ là một ký tự trong tệp, tuy nhiên chúng được biểu thị thành hai ký tự trong PHP vì chúng không thể được nhập bằng bàn phím của bạn

Bạn muốn học PHP 7?

Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay

Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó

Trình tự thoát được sử dụng để thoát một ký tự trong quá trình phân tích chuỗi. Nó cũng được sử dụng để mang lại ý nghĩa đặc biệt để thể hiện ngắt dòng, tab, cảnh báo, v.v.

Các chuỗi thoát được nội suy thành các chuỗi được bao quanh bởi dấu ngoặc kép hoặc cú pháp heredoc. Nếu một chuỗi nằm trong dấu ngoặc đơn hoặc trong nowdocs, thì chuỗi thoát sẽ không hoạt động để có được kết quả như mong đợi. Trong hướng dẫn trước, chúng ta đã thấy nội suy biến

Chuỗi thoát được bắt đầu bằng dấu gạch chéo ngược của ký tự thoát (\) theo sau là ký tự có thể là ký tự chữ và số hoặc ký tự đặc biệt. Nếu đó là một ký tự chữ và số, thì nó có ý nghĩa đặc biệt để biểu thị các ngắt dòng \n, xuống dòng \r và hơn thế nữa

Nếu nó là một ký tự đặc biệt, thì nó sẽ được coi như trong quá trình phân tích chuỗi. Ví dụ: nếu chúng ta nội suy \$var thành một chuỗi thì nó sẽ được lấy là $var. Nếu không có ký tự thoát (\), biến $var PHP được phân tích cú pháp để lấy giá trị của nó

Ví dụ trình tự thoát

Mã này hiển thị một chương trình ví dụ PHP đơn giản để phân biệt hành vi của các chuỗi thoát với các ký tự chữ và số

Trong ví dụ này, tôi đã sử dụng chuỗi thoát \n để thêm dấu ngắt dòng sau nhãn và tôi đã sử dụng \\ để thoát ký tự \ và in nó ra trình duyệt


Các chuỗi thoát được sử dụng rộng rãi trong PHP

Trong phần này, tôi đã liệt kê một số chuỗi thoát được sử dụng rộng rãi và mô tả cách chúng được sử dụng để thoát khỏi ký tự đặc biệt hoặc tạo nghĩa bằng cách kết hợp chúng với một số ký tự chữ và số.

Ký tự dấu gạch chéo ngược có một số cách sử dụng. Đầu tiên, nếu nó được theo sau bởi một ký tự không phải chữ và số, nó sẽ lấy đi bất kỳ ý nghĩa đặc biệt nào mà ký tự đó có thể có. Việc sử dụng dấu gạch chéo ngược này làm ký tự thoát áp dụng cho cả lớp ký tự bên trong và bên ngoài

Ví dụ: nếu bạn muốn khớp ký tự "*", bạn viết "\*" trong mẫu. Điều này áp dụng cho dù ký tự sau có được hiểu là siêu ký tự hay không, do đó, luôn an toàn khi đặt trước một ký tự không phải chữ và số với "\" để xác định rằng ký tự đó đại diện cho chính nó. Cụ thể, nếu bạn muốn khớp dấu gạch chéo ngược, bạn viết "\\"

Ghi chú

PHP trích dẫn đơn và kép có ý nghĩa đặc biệt của dấu gạch chéo ngược. Do đó, nếu \ phải khớp với biểu thức chính quy \\, thì "\\\\" hoặc '\\\\' phải được sử dụng trong mã PHP

Nếu một mẫu được biên dịch với tùy chọn PCRE_EXTENDED, khoảng trắng trong mẫu (không phải trong một lớp ký tự) và các ký tự giữa "#" bên ngoài một lớp ký tự và ký tự xuống dòng tiếp theo sẽ bị bỏ qua. Có thể sử dụng dấu gạch chéo ngược thoát để bao gồm ký tự khoảng trắng hoặc ký tự "#" như một phần của mẫu

Cách sử dụng thứ hai của dấu gạch chéo ngược cung cấp cách mã hóa các ký tự không in được trong các mẫu theo cách hiển thị. Không có hạn chế về sự xuất hiện của các ký tự không in được, ngoài số 0 nhị phân kết thúc một mẫu, nhưng khi một mẫu đang được chuẩn bị bằng cách chỉnh sửa văn bản, việc sử dụng một trong các chuỗi thoát sau đây thường dễ dàng hơn so với ký tự nhị phân

\aalarm, tức là ký tự BEL (hex 07)\cx"control-x", trong đó x là ký tự bất kỳ\eescape (hex 1B)\fformfeed (hex 0C)\nnewline (hex 0A)\p{xx}a . khớp \n, \r và \r\n\ttab (hex 09)\xhhký tự có mã hex hh\dddký tự có mã bát phân ddd hoặc phản hồi

Tác dụng chính xác của "\cx" như sau. nếu "_______4_______" là chữ thường, nó sẽ được chuyển đổi thành chữ hoa. Sau đó, bit 6 của ký tự (hex 40) được đảo ngược. Vì vậy, "\cz" trở thành hex 1A, nhưng "\c{" trở thành hex 3B, trong khi "\c;" trở thành hex 7B

Sau "\x", tối đa hai chữ số thập lục phân được đọc (các chữ cái có thể ở dạng chữ hoa hoặc chữ thường). Ở chế độ UTF-8, "\x{...}" được cho phép, trong đó nội dung của dấu ngoặc nhọn là một chuỗi các chữ số thập lục phân. Nó được hiểu là một ký tự UTF-8 có số mã là số thập lục phân đã cho. Chuỗi thoát thập lục phân ban đầu, \xhh, khớp với ký tự UTF-8 hai byte nếu giá trị lớn hơn 127

Sau "\0" có thêm hai chữ số bát phân được đọc. Trong cả hai trường hợp, nếu có ít hơn hai chữ số, thì chỉ những chữ số có mặt mới được sử dụng. Do đó, chuỗi "\0\x\07" chỉ định hai số 0 nhị phân theo sau là ký tự BEL. Đảm bảo bạn cung cấp hai chữ số sau số 0 đầu tiên nếu ký tự theo sau chính nó là một chữ số bát phân

Việc xử lý dấu gạch chéo ngược theo sau bởi một chữ số khác 0 rất phức tạp. Bên ngoài một lớp ký tự, PCRE đọc nó và bất kỳ chữ số nào sau đây dưới dạng số thập phân. Nếu số nhỏ hơn 10 hoặc nếu đã có ít nhất nhiều dấu ngoặc trái trước đó trong biểu thức, thì toàn bộ chuỗi được lấy làm tham chiếu ngược. Một mô tả về cách thức hoạt động này được đưa ra sau, sau cuộc thảo luận về các mẫu con được đặt trong ngoặc đơn

Bên trong một lớp ký tự hoặc nếu số thập phân lớn hơn 9 và không có nhiều mẫu con bắt giữ như vậy, PCRE đọc lại tối đa ba chữ số bát phân sau dấu gạch chéo ngược và tạo một byte đơn từ 8 bit ít quan trọng nhất của . Bất kỳ chữ số tiếp theo đứng cho chính họ. Ví dụ

\040là một cách khác để viết khoảng trắng\40cũng giống như vậy, với điều kiện là có ít hơn 40 mẫu con chụp trước đó\7luôn là tham chiếu ngược\11có thể là tham chiếu ngược hoặc một cách khác để viết tab\011luôn là tab\0113là một

Lưu ý rằng các giá trị bát phân từ 100 trở lên không được đưa vào bởi số 0 đứng đầu, vì không quá ba chữ số bát phân được đọc

Tất cả các chuỗi xác định một giá trị byte đơn có thể được sử dụng cả bên trong và bên ngoài lớp ký tự. Ngoài ra, bên trong một lớp ký tự, dãy "______4_______0" được hiểu là ký tự xóa lùi (hex 08). Bên ngoài một lớp ký tự, nó có một ý nghĩa khác (xem bên dưới)

Công dụng thứ ba của dấu gạch chéo ngược là để chỉ định các loại ký tự chung

\dany chữ số thập phân\Ký tự Dany không phải là chữ số thập phân\ký tự khoảng trắng ngang bất kỳ\Ký tự hany không phải là ký tự khoảng trắng ngang\ký tự khoảng trắng bất kỳ\Ký tự Sany không phải là ký tự khoảng trắng\ký tự khoảng trắng vany dọc\Ký tự Vany

Mỗi cặp trình tự thoát phân vùng bộ ký tự hoàn chỉnh thành hai bộ riêng biệt. Bất kỳ ký tự đã cho nào khớp với một và chỉ một trong mỗi cặp

Các ký tự "khoảng trắng" là THE (9), OF (10), OF (12), CR (13) và dấu cách (32). Tuy nhiên, nếu khớp theo ngôn ngữ cụ thể đang diễn ra, các ký tự có điểm mã trong phạm vi 128-255 cũng có thể được coi là ký tự khoảng trắng, ví dụ: NBSP (A0)

Ký tự "từ" là bất kỳ chữ cái hoặc chữ số hoặc ký tự gạch dưới, nghĩa là bất kỳ ký tự nào có thể là một phần của "từ" Perl. Định nghĩa của các chữ cái và chữ số được kiểm soát bởi các bảng ký tự của PCRE và có thể thay đổi nếu diễn ra khớp theo ngôn ngữ cụ thể. Ví dụ: trong ngôn ngữ "fr" (tiếng Pháp), một số mã ký tự lớn hơn 128 được sử dụng cho các chữ cái có dấu và những mã này được khớp với _______4_______1

Các chuỗi kiểu ký tự này có thể xuất hiện cả bên trong và bên ngoài lớp ký tự. Mỗi cái khớp với một ký tự thuộc loại thích hợp. Nếu điểm khớp hiện tại nằm ở cuối chuỗi chủ đề, thì tất cả chúng đều không thành công vì không có ký tự nào khớp

Việc sử dụng thứ tư của dấu gạch chéo ngược là cho một số xác nhận đơn giản. Một xác nhận chỉ định một điều kiện phải được đáp ứng tại một thời điểm cụ thể trong một trận đấu mà không sử dụng bất kỳ ký tự nào từ chuỗi chủ đề. Việc sử dụng các mẫu con cho các xác nhận phức tạp hơn được mô tả bên dưới. Các xác nhận gạch chéo ngược là

\bword ranh giới\Bkhông phải là ranh giới từ\Bắt đầu chủ đề (không phụ thuộc vào chế độ nhiều dòng)\Zend của chủ đề hoặc dòng mới ở cuối (không phụ thuộc vào chế độ nhiều dòng)\zend của chủ đề (không phụ thuộc vào chế độ nhiều dòng)\G vị trí khớp đầu tiên trong chủ đề

Những xác nhận này có thể không xuất hiện trong các lớp ký tự (nhưng lưu ý rằng "x0" có một ý nghĩa khác, cụ thể là ký tự xóa lùi, bên trong một lớp ký tự)

Ranh giới từ là một vị trí trong chuỗi chủ đề nơi ký tự hiện tại và ký tự trước đó không khớp với cả x1 hoặc x4 (i. e. một khớp với x1 và cái còn lại khớp với x4) hoặc phần đầu hoặc phần cuối của chuỗi nếu ký tự đầu tiên hoặc cuối cùng khớp với x1, tương ứng

Các khẳng định x8, x9 và \cz0 khác với dấu mũ và đô la truyền thống (được mô tả trong các dấu neo ) ở chỗ chúng chỉ khớp ở phần đầu và phần cuối của chuỗi chủ đề, bất kể tùy chọn nào được đặt. Chúng không bị ảnh hưởng bởi các tùy chọn PCRE_MULTILINE hoặc PCRE_DOLLAR_ENDONLY. Sự khác biệt giữa x9 và \cz0 là x9 khớp trước một dòng mới là ký tự cuối cùng của chuỗi cũng như ở cuối chuỗi, trong khi \cz0 chỉ khớp ở cuối

Khẳng định \cz5 chỉ đúng khi vị trí khớp hiện tại ở điểm bắt đầu của khớp, như được chỉ định bởi đối số \cz6 của preg_match(). Nó khác với x8 khi giá trị của \cz6 khác không

\cz9 và \c{0 có thể được sử dụng để bỏ qua các siêu ký tự biểu thức chính quy trong mẫu. Ví dụ. \c{1 sẽ khớp với một hoặc nhiều ký tự từ, theo sau là ký tự \c{2 và được neo ở cuối chuỗi. Lưu ý rằng điều này không thay đổi hành vi của dấu phân cách;

\c{6 có thể được sử dụng để thiết lập lại bắt đầu trận đấu. Ví dụ: mẫu \c{7 khớp với "foobar", nhưng báo cáo rằng nó đã khớp với "bar". Việc sử dụng \c{6 không can thiệp vào việc thiết lập các chuỗi con đã bắt. Ví dụ: khi mẫu \c{9 khớp với "foobar", chuỗi con đầu tiên vẫn được đặt thành "foo"

Làm cách nào để xóa dấu gạch chéo thoát khỏi chuỗi trong PHP?

Hàm stripslashes() loại bỏ các dấu gạch chéo ngược được thêm bởi hàm addlashes() . Mẹo. Chức năng này có thể được sử dụng để dọn sạch dữ liệu được lấy từ cơ sở dữ liệu hoặc từ biểu mẫu HTML.

Làm cách nào để xóa tất cả các ký tự đặc biệt khỏi chuỗi trong PHP?

Điều này sẽ làm những gì bạn đang tìm kiếm. chức năng sạch($string) { $string = str_replace(' ', '-', $string); . trả về preg_replace('/[^A-Za-z0-9\-]/', '', $string); . }

Làm cách nào để xóa khoảng trắng và ký tự đặc biệt khỏi chuỗi trong PHP?

Có thể dễ dàng xóa các ký tự đặc biệt khỏi chuỗi bằng cách sử dụng hàm preg_replace() trong PHP. Hàm preg_replace() thực hiện tìm kiếm bằng biểu thức chính quy và thay thế các kết quả khớp bằng thay thế được chỉ định.

Làm cách nào để xóa dấu chấm khỏi chuỗi trong PHP?

Sử dụng rtrim để xóa dấu chấm (. ) hoặc các ký tự khác ở cuối chuỗi trong PHP . Với tham số character_mask, bạn có thể chỉ định các ký tự bạn muốn loại bỏ ở cuối.