Làm cách nào để gạch chéo ngược một chuỗi trong PHP?

Dấu gạch chéo ngược cần được loại bỏ một cách tẻ nhạt trong PHP, cả khi xuất hiện bên trong tập lệnh PHP của bạn và khi được sử dụng với preg_replace

2801 lượt xem

Bởi. Jacob

Đã chỉnh sửa. 26-12-2020 18. 03

Gần đây tôi đã gặp một sự cố rất lạ khi dấu gạch chéo ngược theo nghĩa đen không hoạt động trong chuỗi PHP trong một số trường hợp, ngay cả khi sử dụng dấu nháy đơn. Điều này là do dấu gạch chéo ngược có ý nghĩa đặc biệt khi được sử dụng trong mã của tập lệnh PHP

Nếu dấu gạch chéo ngược nằm ở cuối một chuỗi được trích dẫn, dấu gạch chéo ngược cần được thoát. Vì lý do này, có lẽ tốt nhất là luôn thoát khỏi dấu gạch chéo ngược của bạn, vì nó sẽ tránh nhầm lẫn trong mã

Ví dụ: tôi đã tạo một biểu thức chính quy để thay thế cả dấu gạch chéo lên và dấu gạch chéo ngược từ đường dẫn tệp, bao gồm các dấu gạch chéo trùng lặp như "//", tuy nhiên, tôi vẫn gặp lỗi vì dấu gạch chéo ngược không được thoát đúng cách

Với preg_replace, dấu gạch chéo ngược cần được thoát kép

$str = 'c:\\\\this\\\\test\\\\';

echo preg_replace['#[/\\\\]+#', '/', $str];

Rõ ràng bạn cần thoát khỏi dấu gạch chéo ngược hai lần trong một biểu thức chính quy, do đó thoát kép "\\\\"

đầu ra là

c:/this/test/

Không thoát khỏi dấu gạch chéo ngược có thể dẫn đến lỗi như

Lỗi phân tích cú pháp PHP. lỗi cú pháp, kết thúc tệp không mong muốn trong dấu gạch chéo ngược. php trên dòng 5

Biểu thức chính quy và dấu gạch chéo ngược

Vấn đề với dấu gạch chéo ngược dường như có hai cấp độ đối với nó. Trước tiên, chúng ta phải thoát khỏi các dấu gạch chéo ngược được khai báo bên trong mã của các tập lệnh PHP của chúng ta. Thứ hai, chúng ta cũng sẽ cần thoát khỏi các dấu gạch chéo ngược theo nghĩa đen được sử dụng trong các biểu thức chính quy

Vấn đề với biểu thức chính quy tồn tại ở hai nơi — cả trong mẫu biểu thức chính quy và chuỗi thay thế

Điều này là do dấu gạch chéo ngược có ý nghĩa đặc biệt ở cả hai nơi

Khi thực hiện thao tác thay thế, chúng ta có thể sử dụng preg_quote cho mẫu, nhưng không thể sử dụng điều này cho chuỗi thay thế;

$replacement_id = 'REPLACEMENT_ID';

// Escape backslashes in PHP script [First level]
$unescaped_string = 'c:\\test\\testing\\some-file.txt';
// Escape backslashes in the replacement string [Second level]
$escaped_string = str_replace['\\', '\\\\', $unescaped_string];
$new_html = preg_replace['|{$replacement_id}|', $escaped_string, $html];

Lưu ý rằng điều này sẽ chuẩn bị chuỗi thay thế để sử dụng với preg_replace — nhưng trong hầu hết các trường hợp, bạn có thể chỉ cần sử dụng str_replace hoặc substr_replace thay thế

Thay thế một chuỗi trong một số HTML

Giả sử bạn muốn thay thế một chuỗi duy nhất trong một số mã HTML và bạn chỉ muốn thực hiện thay thế "thả vào" mà không sửa đổi chuỗi thay thế;

$html = '
REPLACEMENT_ID
'
; $replacement_id = 'REPLACEMENT_ID'; $replacement = '
c:\\test\\some-file.txt
'
; $html = str_replace[$replacement_id, $replacement, $html]; echo $html;

đầu ra

c:\test\some-file.txt

Tại sao sử dụng id thay thế?

Đôi khi bạn chỉ cần thực hiện thay thế thả xuống, nhưng tôi cũng nhận ra rằng hầu hết các bạn có thể sử dụng tham chiếu ngược với preg_replace;

Trong hướng dẫn này, tôi đang tập trung vào vấn đề gây ra bởi dấu gạch chéo ngược trong mẫu hoặc chuỗi chủ đề của bạn chứ không phải cách viết các mẫu đó. Thay thế thả xuống là một cách đơn giản để chứng minh vấn đề này

Để tìm hiểu cách viết các mẫu cơ bản để thay thế chuỗi, hãy xem hướng dẫn này. Cách thay thế các phần của chuỗi bằng str_replace và preg_replace

Làm cách nào để lấy dữ liệu sau dấu gạch chéo trong PHP?

Rất đơn giản. $id = substr[$url, strrpos[$url, '/'] + 1]; strrpos lấy vị trí xuất hiện cuối cùng của dấu gạch chéo .

Chủ Đề