Các ký tự thoát là gì và làm cách nào để chúng tôi tự động xử lý ký tự đó trong php?

Nhiều ngôn ngữ lập trình hiện đại hỗ trợ nhiều cách khác nhau để sử dụng các ký tự khác nhau, chẳng hạn như ký tự tiếng Anh Latinh đơn giản, số, ký hiệu, Biểu tượng cảm xúc và các ký tự đặc biệt khác nhau như ký tự dòng mới hoặc ký tự tab

Hầu hết các ký tự có thể được nhập đơn giản từ bàn phím và được sử dụng trong đoạn mã PHP nguyên trạng. Ví dụ:

$name = 'John';
echo 'Hi $name'; // "Hi $name"
7 là một chuỗi hoàn toàn hợp lệ trong PHP và
$name = 'John';
echo 'Hi $name'; // "Hi $name"
8 là một số hoàn toàn hợp lệ. Cũng có thể sử dụng các ký tự nhiều byte (i. e. các ký tự yêu cầu nhiều hơn một byte để lưu trữ) và hoàn toàn hợp lệ.
$name = 'John';
echo 'Hi $name'; // "Hi $name"
9

PHP, trong số nhiều ngôn ngữ lập trình khác, hỗ trợ một số chuỗi thoát ký tự để sử dụng các ký tự khác nhau không thể nhập từ bàn phím tiêu chuẩn, không thể được biểu diễn dưới dạng văn bản (chẳng hạn như ký tự ẩn hoặc các ký tự điều khiển khác nhau) hoặc không thể đọc được. Các ký tự này sử dụng các chuỗi thoát ký tự mà PHP nhận ra

Đối với các số, PHP hỗ trợ các số thập phân tiêu chuẩn, nhưng cũng có thể sử dụng các ký hiệu khác như ký hiệu nhị phân, bát phân, thập lục phân và thậm chí cả ký hiệu khoa học. Họ có thể làm cho mã dễ đọc hơn và rõ ràng hơn tùy thuộc vào các ngữ cảnh khác nhau

Dấu ngoặc kép và Heredoc

Trong PHP, một chuỗi có dấu ngoặc kép (

$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
0) hoặc Heredoc (xem bên dưới) hỗ trợ trình tự thoát ký tự và phép nội suy biến

Nội suy biến có nghĩa là PHP sẽ cố gắng nội suy các biến nếu chuỗi ký tự nằm trong chuỗi trích dẫn kép hoặc Heredoc

$name = 'John';
echo "Hi $name"; // "Hi John"
$name = 'John';
echo <<

Ngoài ra, và tốt hơn là, các biến được nội suy có thể dễ đọc hơn trong dấu ngoặc nhọn

$name = 'John';
echo "Hi {$name}"; // "Hi John"

Các chuỗi trích dẫn đơn (

$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
1) và cú pháp Nowdoc không nội suy các biến

$name = 'John';
echo 'Hi $name'; // "Hi $name"
$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"

Chỉ các chuỗi trích dẫn kép và các chuỗi thoát ký tự hỗ trợ Heredoc

Bởi vì PHP diễn giải và nội suy các ký tự đặc biệt bên trong chuỗi ký tự trích dẫn kép và chuỗi ký tự heredoc, dấu gạch chéo ngược (

$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
2) được sử dụng làm "ký tự thoát"

Ví dụ: sử dụng

$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
3 thay vì
$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
4 ngăn PHP nội suy biến
$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
4

$name = 'John';
echo "Hi \$name"; // "Hi $name"

Sử dụng hai ký tự dấu gạch chéo ngược ngăn chính ký tự dấu gạch chéo ngược trở thành ký tự thoát

$name = 'John';
echo "Hi \\$name"; // "Hi \John"

PHP hỗ trợ một số chuỗi thoát đặc biệt cho các ký tự đặc biệt. Trong ví dụ trên,

$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
6 được coi là một chuỗi thoát, bởi vì nó phủ nhận phép nội suy của PHP bằng cách làm cho PHP sử dụng ký tự
$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
7 bằng chữ

Có lẽ cái đơn giản nhất là ký tự tab. Có thể sử dụng một ký tự tab bên trong một chuỗi ký tự, nhưng việc sử dụng

$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
8 làm cho rõ ràng hơn rằng một ký tự tab được sử dụng, thay vì khoảng trắng. Sử dụng
$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
8 thay vì ký tự tab theo nghĩa đen cũng giúp tránh các IDE khác nhau tự động thay đổi ký tự tab thành dấu cách

echo "Foo\tBar";
Foo Bar

$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
9 là tab dọc. Trên các thiết bị đầu cuối được hỗ trợ, một ký tự tab dọc chuyển sang ký tự tiếp theo trong dòng tiếp theo

echo "Foo\vBar\vBaz";
$name = 'John';
echo <<
0

$name = 'John';
echo "Hi \$name"; // "Hi $name"
3 ("Trở về vận chuyển") và
$name = 'John';
echo "Hi \$name"; // "Hi $name"
4 ("Nạp dòng") là các ký tự dòng mới

Trước đây, các hệ thống khác nhau bắt đầu sử dụng

$name = 'John';
echo "Hi \$name"; // "Hi $name"
3 hoặc
$name = 'John';
echo "Hi \$name"; // "Hi $name"
4 và thậm chí cả Windows với
$name = 'John';
echo "Hi \$name"; // "Hi $name"
9. Ví dụ: theo mặc định, Linux và MacOS sử dụng ký tự "nguồn cấp dữ liệu xuống dòng" (
$name = 'John';
echo "Hi \$name"; // "Hi $name"
4) làm ký tự xuống dòng, trong khi Windows sử dụng
$name = 'John';
echo "Hi \$name"; // "Hi $name"
9 (dấu xuống dòng, theo sau là ký tự xuống dòng). Các hệ thống MacOS cũ hơn đã sử dụng
$name = 'John';
echo "Hi \$name"; // "Hi $name"
3 làm ký tự dòng mới

PHP có hằng số

$name = 'John';
echo "Hi \\$name"; // "Hi \John"
3 luôn đề cập đến ký tự dòng mới dành riêng cho hệ thống

$name = 'John';
echo <<
1_______5_______2

Ký tự thoát thường được sử dụng để gửi các chuỗi thoát ANSI đến một thiết bị đầu cuối. Ví dụ:

$name = 'John';
echo "Hi \\$name"; // "Hi \John"
4, theo sau là
$name = 'John';
echo "Hi \\$name"; // "Hi \John"
6 yêu cầu thiết bị đầu cuối thay đổi màu thành xanh lục và
$name = 'John';
echo "Hi \\$name"; // "Hi \John"
7 cho màu vàng

$name = 'John';
echo <<
3

Nếu đoạn mã trên được chạy trong một thiết bị đầu cuối hỗ trợ các chuỗi thoát ANSI, nó sẽ diễn giải đoạn mã đó và sửa đổi văn bản

Các ký tự thoát là gì và làm cách nào để chúng tôi tự động xử lý ký tự đó trong php?

Ký tự nguồn cấp dữ liệu biểu mẫu là ký tự điều khiển ASCII để ngắt trang. Máy in có thể đẩy trang hiện tại ra và bắt đầu từ đầu trang khác. Khi

$name = 'John';
echo "Hi \\$name"; // "Hi \John"
8 được chuyển đến thiết bị đầu cuối hiển thị, nó có thể xóa màn hình, mặc dù điều này rất hiếm trong hầu hết các phần mềm mô phỏng thiết bị đầu cuối


PHP hỗ trợ thoát một số Bát phân thành ký tự ASCII của nó

Ví dụ: ký tự ASCII () cho

echo "Foo\tBar";
0 là
echo "Foo\tBar";
1 ở dạng thập phân. 80 ở dạng thập phân sang Bát phân là
echo "Foo\tBar";
2

Chuỗi thoát ký tự Octal có thể được sử dụng cho ký tự

echo "Foo\tBar";
0

$name = 'John';
echo <<
4_______5_______5

Trên thực tế, có thể biểu diễn bất kỳ ký tự ASCII cơ bản nào bằng ký hiệu này

$name = 'John';
echo <<
6_______5_______7

Bất kỳ giá trị nào trong phạm vi từ

echo "Foo\tBar";
4 đến
echo "Foo\tBar";
5 sẽ được hiểu là chuỗi thoát ký tự Bát phân

Lưu ý rằng các số ký tự ASCII mở rộng (128 đến 255) không tương thích với UTF-8. PHP coi giá trị là

echo "Foo\tBar";
6 (tháng 10.
echo "Foo\tBar";
7; .
echo "Foo\tBar";
1) không hợp lệ vì đó không phải là giá trị UTF-8 hợp lệ

Mặc dù PHP chấp nhận các giá trị như vậy nhưng chúng được coi là các ký tự không hợp lệ trong ngữ cảnh UTF-8

Tương tự như các chuỗi thoát ký tự Octal, PHP cũng cho phép các số Hexadecimal trong một chuỗi thoát ký tự với tiền tố

echo "Foo\tBar";
9

Nó chỉ cho phép một byte, có nghĩa là phạm vi hợp lệ là

Foo Bar
0 đến
Foo Bar
1. Tuy nhiên, giới hạn UTF-8 vẫn được áp dụng và chỉ các giá trị tối đa
Foo Bar
2 mới được coi là ký tự hợp lệ

Hơn nữa, các ký tự thập lục phân không phân biệt chữ hoa chữ thường (i. e.

Foo Bar
3 bằng với
Foo Bar
4 và
Foo Bar
5)

ASCII

echo "Foo\tBar";
0 là
echo "Foo\tBar";
1, tương đương với
Foo Bar
8

$name = 'John';
echo <<
8_______5_______5

Ví dụ

Foo Bar
9 tương tự có thể được thực hiện với các chuỗi thoát ký tự Hex

$name = 'John';
echo "Hi {$name}"; // "Hi John"
0_______5_______7

PHP hỗ trợ sử dụng bất kỳ ký tự Unicode nào có tiền tố

echo "Foo\vBar\vBaz";
0 và giá trị Hex của điểm mã bên trong dấu ngoặc nhọn

$name = 'John';
echo "Hi {$name}"; // "Hi John"
2
$name = 'John';
echo "Hi {$name}"; // "Hi John"
3

PHP sẽ đưa ra lỗi Trình phân tích cú pháp nếu ký tự Unicode vượt quá giá trị

echo "Foo\vBar\vBaz";
1

$name = 'John';
echo "Hi {$name}"; // "Hi John"
4_______6_______5

Giới hạn trên của

echo "Foo\vBar\vBaz";
1 là do UTF-8 có các ranh giới là
echo "Foo\vBar\vBaz";
3 và
echo "Foo\vBar\vBaz";
4

Phiên bản trước của bài viết này đã đề cập không chính xác giới hạn trên là

echo "Foo\vBar\vBaz";
5, thay vì
echo "Foo\vBar\vBaz";
1 hiện đã được sửa. Cảm ơn Sara Golemon đã chỉ ra


Ký hiệu Unicode

echo "Foo\vBar\vBaz";
7 có thể được sử dụng làm chuỗi thoát cho bất kỳ ký tự nào. Dưới đây là một số ví dụ

CharacterCode point (Dec)Code point (Hex)Unicode escape sequence
echo "Foo\vBar\vBaz";
86541
echo "Foo\vBar\vBaz";
9
$name = 'John';
echo <<
006642
$name = 'John';
echo <<
01
$name = 'John';
echo <<<'NOWDOC'
Hi $name
NOWDOC;
// "Hi $name"
73624
$name = 'John';
echo <<
03
$name = 'John';
echo <<
04836420AC
$name = 'John';
echo <<
0510A
$name = 'John';
echo <<
0713D
$name = 'John';
echo <<
0999
$name = 'John';
echo <<
1111B
$name = 'John';
echo <<
13271B
$name = 'John';
echo <<
1512C
$name = 'John';
echo <<
17
$name = 'John';
echo <<
181280241F418
$name = 'John';
echo <<
19
$name = 'John';
echo <<
203461D85
$name = 'John';
echo <<
21

Vài năm trước, PHP 5. 2. 1 đã giới thiệu một cú pháp chuỗi mới gọi là "chuỗi nhị phân". Nó chỉ đơn thuần là một cú pháp và nó có nghĩa là một cải tiến tương thích về phía trước cho PHP 6 sắp tới

Cú pháp là thêm tiền tố vào chuỗi trích dẫn đơn/kép với

$name = 'John';
echo <<
22 và PHP có thể suy ra nó dưới dạng chuỗi nhị phân

$name = 'John';
echo "Hi {$name}"; // "Hi John"
6
$name = 'John';
echo "Hi {$name}"; // "Hi John"
7

Các hàm

$name = 'John';
echo <<
23,
$name = 'John';
echo <<
24 và
$name = 'John';
echo <<
25 dùng để phân biệt chuỗi nhị phân và chuỗi Unicode trong PHP 6, nhưng chúng không bao giờ xuất hiện trong phiên bản PHP 7 tiếp theo. Tuy nhiên, cú pháp chuỗi nhị phân đã xuất hiện trong PHP 7 và cũng tiếp tục trong PHP 8

Cú pháp chuỗi nhị phân không có chức năng đặc biệt và không phục vụ mục đích nào khác ngoài việc là tàn tích lịch sử, câu hỏi phỏng vấn giật tóc, mẩu tin cho các bài viết PHP và gây nhầm lẫn cho các nhà phát triển PHP khác

Cú pháp này không được dùng nữa, cũng không được lên kế hoạch xóa trong phiên bản PHP trong tương lai


ký hiệu số

Khi sử dụng các chữ số trong tập lệnh PHP, theo mặc định, PHP sẽ yêu cầu các giá trị thập phân. Tuy nhiên, PHP cũng cho phép các ký hiệu số khác như số nhị phân, số bát phân, số thập lục phân và ký hiệu khoa học

Từ PHP7. 4, PHP cũng cho phép dấu phân cách số gạch dưới để dễ đọc hơn đối với các số dài

Bất kỳ chữ số nào bắt đầu bằng tiền tố

$name = 'John';
echo <<
26 sẽ được coi là số nhị phân

$name = 'John';
echo "Hi {$name}"; // "Hi John"
8

Với dấu phân cách số gạch dưới, có thể sử dụng dấu gạch dưới để dễ đọc hơn

$name = 'John';
echo "Hi {$name}"; // "Hi John"
9
$name = 'John';
echo 'Hi $name'; // "Hi $name"
0

PHP chấp nhận các giá trị số bát phân với tiền tố

$name = 'John';
echo <<
27. Từ PHP8. 1, PHP cũng hỗ trợ ký hiệu số Octal rõ ràng với tiền tố
$name = 'John';
echo <<
28 và
$name = 'John';
echo <<
29

$name = 'John';
echo 'Hi $name'; // "Hi $name"
1

Các số thập lục phân được diễn giải bằng tiền tố

$name = 'John';
echo <<
30 và
$name = 'John';
echo <<
31

$name = 'John';
echo 'Hi $name'; // "Hi $name"
2

PHP cũng hỗ trợ "ký hiệu E" khoa học cho các giá trị float

$name = 'John';
echo 'Hi $name'; // "Hi $name"
3

Ký hiệu E tương đương với

$name = 'John';
echo <<
32 (10 mũ 0). Lưu ý rằng trong nhiều ngôn ngữ lập trình (bao gồm cả PHP), toán tử
$name = 'John';
echo <<
33 được sử dụng cho XOR, trong khi
$name = 'John';
echo <<
34 được sử dụng cho nguồn

Lợi thế dễ đọc của ký hiệu số khoa học rõ ràng hơn đối với các số rất chính xác hoặc số lớn

$name = 'John';
echo 'Hi $name'; // "Hi $name"
4_______0_______5

PHP hỗ trợ nhiều dạng chuỗi thoát ký tự và ký hiệu số. Nó gần đây đã thêm ký hiệu số Octal rõ ràng với tiền tố

$name = 'John';
echo <<
28/
$name = 'John';
echo <<
29 (PHP 8. 1) và dấu phân cách số gạch dưới (PHP 7. 4)

Lưu ý rằng các chuỗi thoát ký tự và ký hiệu số này không được diễn giải trong đầu vào của người dùng. Ví dụ: chuyển một số được phân tách bằng dấu gạch dưới thành một số nguyên sẽ không sử dụng tính năng dấu gạch dưới-số-dấu cách của PHP cho các chuỗi do người dùng cung cấp

$name = 'John';
echo 'Hi $name'; // "Hi $name"
6

Các chuỗi thoát ký tự khác được sử dụng trong đầu vào của người dùng cũng không được đánh giá. Ví dụ: nếu một biểu mẫu gửi

$name = 'John';
echo <<
37 đến một trường biểu mẫu, thì giá trị đó sẽ được sử dụng nguyên trạng mà không được hiểu là một chuỗi thoát ký tự Bát phân. Ngược lại,
$name = 'John';
echo <<
38 mang lại giá trị tương đương
$name = 'John';
echo <<
39 vì chúng được đánh giá trong các tệp nguồn PHP

Làm cách nào để thoát các ký tự đặc biệt trong PHP?

Thoát nhân vật . the backslash sign ( \ ) is used as an "escape character".

ký tự thoát là gì?

Trong điện toán và viễn thông, một ký tự thoát là ký tự đưa ra cách giải thích thay thế cho các ký tự sau trong chuỗi ký tự . Một ký tự thoát là một trường hợp cụ thể của siêu ký tự.

Làm cách nào để thoát khỏi một chuỗi trong PHP?

Việc thoát các ký tự trong chuỗi có thể được thực hiện bằng cách sử dụng \ (dấu gạch chéo ngược) trước ký tự bạn muốn thoát .