PHP thoát khỏi trích dẫn đơn

Bất kỳ ký hiệu đơn lẻ nào được đặt trong dấu ngoặc kép là một chuỗi. Một chuỗi rỗng '' cũng là một chuỗi. Chúng tôi xem xét một chuỗi bất kỳ thứ gì được đặt trong dấu ngoặc kép, thậm chí là khoảng trắng hoặc không có ký hiệu nào cả

Trong các bài học trước, chúng ta đã sử dụng dấu nháy đơn, nhưng đó không phải là cách duy nhất để chỉ định chuỗi. Bạn cũng có thể sử dụng dấu ngoặc kép

Vì vậy, bạn đang vui vẻ viết mã, thiết lập xác thực dữ liệu của mình, khi bạn nhận ra rằng bạn đột nhiên không thể xác thực tên “John O'Neil” — điều gì mang lại? . Tôi sẽ cho rằng việc xác thực dữ liệu của bạn đã hoạt động hoàn hảo—nếu không, thì bạn cần phải làm cho nó hoạt động hiệu quả

Vấn đề tiềm ẩn 1 - Thoát khỏi dấu gạch chéo ngược

Trước tiên, hãy đảm bảo rằng biến bạn đang kiểm tra không có bất kỳ dấu gạch chéo ngược không mong muốn nào thoát khỏi dấu nháy đơn. Bạn có thể làm điều này với hàm Stripslashes() trong PHP. Mã của bạn sẽ trông giống như thế này

$my_name_field = $_POST['name'];
$my_name_field = stripslashes($my_name_field);

Nếu bạn sử dụng phương pháp này, hãy nhớ rằng sau này bạn có thể cần phải thoát lại các trích dẫn đó nếu bạn đang làm một việc gì đó như đưa dữ liệu vào cơ sở dữ liệu. Bạn cũng có thể chỉ cần sử dụng dấu ngoặc kép để đưa nó vào cơ sở dữ liệu, điều này sẽ loại bỏ vấn đề thoát lại

Vấn đề tiềm ẩn 2 - Regex của bạn có thể sai

Khi bạn đặt trích dẫn đơn vào biểu thức chính quy của mình, hãy thoát nó bằng dấu gạch chéo ngược và sau đó nhớ thay đổi các trích dẫn xung quanh thành trích dẫn kép nếu bạn đang sử dụng dấu ngoặc đơn. Ví dụ: một hàm trả về true hoặc false cho một tên hợp lệ bao gồm chữ cái ASCII viết hoa và viết thường, dấu gạch nối, dấu chấm, dấu phẩy, dấu cách và dấu nháy đơn trông như thế này

function validateName($name) {
     if (!preg_match("/^[A-Za-z\\-\\., \']+$/",$name)) {
          $isValid = false;
     } else {
          $isValid = true;
     }
     return $isValid;
}

Điều đó sẽ xử lý bất kỳ tên tiếng Anh hợp lệ nào. Tất nhiên, nếu bạn xử lý nhiều tên có ký tự nằm ngoài những ký tự được chỉ định, bạn sẽ muốn sửa đổi tên đó cho phù hợp với nhu cầu của mình

Vấn đề tiềm ẩn 3 — Điều gì sẽ xảy ra nếu bạn không thể thoát khỏi nhát chém?

Có thể, vì lý do nào đó, bạn không thể xóa dấu gạch chéo thoát. Nếu trường hợp này xảy ra, chỉ cần loại bỏ nó trong chức năng trên thay vì thực hiện trong mã chính. Giả sử bạn không chuyển biến theo tham chiếu, dấu gạch chéo vẫn ở vị trí trong biến bạn cần, nó chỉ bị xóa trong biến tạm thời trong hàm

Ngoài ra, bạn chỉ có thể thêm dấu gạch chéo ngược vào danh sách các ký tự được phép của mình… Tuy nhiên, tôi sẽ cố gắng tránh điều này… bạn không bao giờ biết một số cá nhân độc hại có thể nghĩ ra điều gì nếu bạn cho phép các ký tự thoát vào đầu vào của mình

Vẫn không hoạt động?

Nếu cách trên không hoạt động và bạn không thể hiểu tại sao, hãy sử dụng hàm str_replace() trong hàm để loại bỏ tất cả các dấu nháy đơn, như thế này. str_replace("'","",$name). Tuy nhiên, hãy chắc chắn rằng bạn chỉ làm điều đó trong hàm và không chuyển nó trở lại mã chính, nếu không, bạn sẽ mất hoàn toàn dấu nháy đơn

Sự khác biệt đáng kể nhất giữa dấu ngoặc đơn và dấu ngoặc kép nằm khi chúng ta nội suy chuỗi và biến. Trích dẫn đơn không nội suy chuỗi và các biến. Nội dung bên trong trích dẫn đơn in ra chính xác như nó vốn có. Trong hầu hết các trường hợp, không có phần tổng hợp của bất kỳ biến hoặc chuỗi thoát nào bên trong dấu nháy đơn

Tuy nhiên, trong trường hợp trích dẫn kép, biến được viết bên trong dấu ngoặc kép sẽ được nội suy với chuỗi. Nó có nghĩa là biến trong chuỗi sẽ được đánh giá. Do đó, rất dễ sử dụng dấu ngoặc kép khi nội suy chuỗi và các biến. Ưu điểm của dấu nháy kép so với dấu nháy đơn là chúng ta không cần nối chuỗi và biến bằng cách sử dụng. nhà điều hành. Tuy nhiên, vì các biến cần được đánh giá trong chuỗi, nên sử dụng dấu nháy kép sẽ chậm hơn một chút so với sử dụng dấu nháy đơn

Ví dụ: tạo một biến $name và viết chuỗi Bond vào đó. Tiếp theo, viết chuỗi Tên là $name. và kèm theo chuỗi với dấu ngoặc kép. Sử dụng hàm echo để in chuỗi. Tương tự, kèm theo chuỗi chính xác với một trích dẫn trong dòng sau

Mã ví dụ

đầu ra

The name is Mustafa.
The name is $name.

Phần này sẽ thảo luận về chuỗi thoát sử dụng dấu ngoặc kép và dấu nháy đơn trong PHP. Các trình tự thoát có thể được sử dụng bên trong dấu ngoặc kép để thoát các ký tự. Trong khi đó, hầu hết các chuỗi thoát không được diễn giải trong một trích dẫn. Tuy nhiên, có một ngoại lệ để thoát khỏi dấu nháy đơn

Không cần thoát khỏi dấu nháy đơn nếu chúng ta viết dấu nháy đơn trong chuỗi khi sử dụng dấu nháy kép. Tuy nhiên, trong trường hợp trích dẫn đơn lẻ, chúng ta cần thoát nó bằng cách sử dụng \'. Ví dụ được hiển thị dưới đây

Mã ví dụ

đầu ra

Mustafa Ahmed's  "Think and grow rich".
Mustafa Ahmed's \"Think and grow rich\".

Trong đoạn mã trên, rõ ràng là dấu nháy đơn không được thoát bằng cách sử dụng dấu ngoặc kép. Dấu ngoặc kép cũng được thoát bên trong dấu ngoặc kép bằng ký tự thoát. Trong khi đó, trong trường hợp trích dẫn đơn, dấu nháy đơn được thoát bằng ký tự thoát. Trong trường hợp sau, dấu ngoặc kép không thoát khi sử dụng ký tự thoát

Làm cách nào để bỏ qua một trích dẫn trong PHP?

Trường hợp đặc biệt là nếu bạn muốn hiển thị một trích dẫn đơn theo nghĩa đen, hãy thoát nó bằng dấu gạch chéo ngược (\) và nếu bạn muốn .

Làm cách nào để xử lý dấu nháy đơn trong PHP?

Trích dẫn đơn ¶ . Để chỉ định một trích dẫn đơn theo nghĩa đen, hãy thoát nó bằng dấu gạch chéo ngược ( \ ) . Để chỉ định dấu gạch chéo ngược theo nghĩa đen, hãy nhân đôi nó ( \\ ).

Làm cách nào để thoát khỏi trích dẫn đơn trong PHP MySQL?

Tương tự, chúng ta có thể sử dụng dấu gạch chéo ngược để thoát khỏi dấu ngoặc đơn và dấu ngoặc kép để chèn giá trị vào bảng MySQL.

Làm cách nào để thoát dấu ngoặc kép trong PHP?

Trình tự thoát . Trình tự thoát áp dụng cho chuỗi trích dẫn kép. Chuỗi trích dẫn đơn chỉ sử dụng chuỗi thoát cho một trích dẫn hoặc dấu gạch chéo ngược. an escape sequence starts with a backslash \ . Escape sequences apply to double-quoted strings. A single-quoted string only uses the escape sequences for a single quote or a backslash.