Xóa các ký tự thoát khỏi chuỗi 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ự Latinh tiếng Anh đơ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 sẽ 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"
4

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 $name"
5

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 tránh các IDE khác nhau tự động thay đổi ký tự tab thành dấu cách

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

$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

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

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

Trong lịch sử, các hệ thống khác nhau bắt đầu sử dụng

$name = 'John';
echo 'Hi $name'; // "Hi $name"
43 hoặc
$name = 'John';
echo 'Hi $name'; // "Hi $name"
44 và thậm chí cả Windows với
$name = 'John';
echo 'Hi $name'; // "Hi $name"
49. 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"
44) làm ký tự xuống dòng, trong khi Windows sử dụng
$name = 'John';
echo 'Hi $name'; // "Hi $name"
49 (ký tự 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"
43 làm ký tự dòng mới

PHP có hằng số

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

$name = 'John';
echo <<
1
$name = 'John';
echo <<
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 $name"
54, tiếp theo là
$name = 'John';
echo 'Hi $name'; // "Hi $name"
56 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 $name"
57 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

Xóa các ký tự thoát khỏi chuỗi 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 $name"
58 đượ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

$name = 'John';
echo 'Hi $name'; // "Hi $name"
00 là
$name = 'John';
echo 'Hi $name'; // "Hi $name"
01 ở dạng thập phân. 80 ở dạng thập phân sang Bát phân là
$name = 'John';
echo 'Hi $name'; // "Hi $name"
02

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

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

$name = 'John';
echo <<
4
$name = 'John';
echo <<
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
$name = 'John';
echo <<
7

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

$name = 'John';
echo 'Hi $name'; // "Hi $name"
04 đến
$name = 'John';
echo 'Hi $name'; // "Hi $name"
05 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 xem xét giá trị của

$name = 'John';
echo 'Hi $name'; // "Hi $name"
06 (tháng 10.
$name = 'John';
echo 'Hi $name'; // "Hi $name"
07; .
$name = 'John';
echo 'Hi $name'; // "Hi $name"
01) không hợp lệ vì đây 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ố

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

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

$name = 'John';
echo 'Hi $name'; // "Hi $name"
10 đến
$name = 'John';
echo 'Hi $name'; // "Hi $name"
11. Tuy nhiên, giới hạn UTF-8 vẫn được áp dụng và chỉ các giá trị tối đa
$name = 'John';
echo 'Hi $name'; // "Hi $name"
12 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.

$name = 'John';
echo 'Hi $name'; // "Hi $name"
13 bằng với
$name = 'John';
echo 'Hi $name'; // "Hi $name"
14 và
$name = 'John';
echo 'Hi $name'; // "Hi $name"
15)

ASCII

$name = 'John';
echo 'Hi $name'; // "Hi $name"
00 là
$name = 'John';
echo 'Hi $name'; // "Hi $name"
01, tương đương với
$name = 'John';
echo 'Hi $name'; // "Hi $name"
18

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

Có thể tạo ví dụ tương tự về

$name = 'John';
echo 'Hi $name'; // "Hi $name"
19 với các chuỗi thoát ký tự Hex

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

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

$name = 'John';
echo 'Hi $name'; // "Hi $name"
30 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ị

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

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

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

$name = 'John';
echo 'Hi $name'; // "Hi $name"
31 là do UTF-8 có các ranh giới là
$name = 'John';
echo 'Hi $name'; // "Hi $name"
33 và
$name = 'John';
echo 'Hi $name'; // "Hi $name"
34

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à

$name = 'John';
echo 'Hi $name'; // "Hi $name"
35, thay vì
$name = 'John';
echo 'Hi $name'; // "Hi $name"
31 hiện đã được sửa. Cảm ơn Sara Golemon đã chỉ ra


Ký hiệu Unicode

$name = 'John';
echo 'Hi $name'; // "Hi $name"
37 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
$name = 'John';
echo 'Hi $name'; // "Hi $name"
386541
$name = 'John';
echo 'Hi $name'; // "Hi $name"
39
$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 dư lịch sử, câu hỏi phỏng vấn giật tóc, mẩu tin cho các bài báo 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

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
$name = 'John';
echo 'Hi $name'; // "Hi $name"
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 để xóa các ký tự thoát khỏi chuỗi trong PHP?

Ví dụ đơn giản để thoát các ký tự đặc biệt trong PHP . php sẽ có biến Escape Sequence Validation để lưu trữ tất cả các ký tự đặc biệt, cần xóa khỏi chuỗi nguồn. use str_replace method to remove special characters from a string, I have created a config. php file that will have escapeSequenceValidation variable to store all special characters, that need to remove from the source string.

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

Một hàm hữu ích có thể dùng để xóa các ký tự đặc biệt khỏi chuỗi là hàm str_replace() . Chuỗi trống phải được sử dụng cho ký tự thay thế trong hàm này để xóa ký tự đã chỉ định.

Làm cách nào để xóa khoảng trắng và ký tự đặc biệt 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 dấu gạch chéo lên khỏi chuỗi trong PHP?

Hàm Stripeslashes() xóa 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.