2010-05-02 45 views
5

Tôi nên làm thế nào để thêm dấu gạch chéo vào các dấu nháy đơn và bỏ qua dấu ngoặc kép? Tôi đang sử dụng php. Tôi chỉ muốn thoát khỏi các dấu nháy đơn để ngăn các truy vấn mysql php của tôi bị phá vỡ.Tôi nên làm thế nào để thêm dấu gạch chéo vào dấu nháy đơn và bỏ qua dấu ngoặc kép?

Cảm ơn bạn!

Chỉnh sửa: Tôi đang nghĩ tìm kiếm biểu thức chính quy và thay thế sẽ hữu ích nhất.

+4

Ghi lời Jamie Zawinski của : Một số người, khi đối mặt với một vấn đề, hãy nghĩ rằng "Tôi biết, tôi sẽ sử dụng các biểu thức chính quy." Bây giờ họ có hai vấn đề. –

Trả lời

2

Vâng, preg_replace_all("/([^\])'/","$1\'",$yourStrHere) sẽ làm những gì bạn đang yêu cầu:

  • "/ ([^ \]) ​​'/" mang regex/([^ \])' /, mà nói "phù hợp trên bất kỳ ký tự đơn nào không phải là dấu gạch chéo ngược theo sau là một dấu trích dẫn duy nhất và ghi lại ký tự trước dấu ngoặc kép. "
  • "$ 1 \ '" nói 'thay thế với nhân vật bị bắt theo sau là một dấu chéo ngược và một dấu nháy đơn'

NHƯNG ...

câu trả lời của Bill về các truy vấn parametrized sử dụng mysqli hoặc API PDO là thực sự, lời khuyên thực sự tốt. Việc API cơ sở dữ liệu của bạn dễ dàng hơn và hiệu quả hơn là tự làm điều đó - những người đã viết các API này (và những người làm việc trên các chương trình phụ trợ gốc cho các API đó) có thể dành nhiều thời gian và công sức hơn để giải quyết vấn đề bảo mật và vấn đề hiệu suất hơn hầu hết chúng ta đều có thể hy vọng chi tiêu cho chính mình.

+0

Cảm ơn tất cả vì sự giúp đỡ. Tôi thực sự đánh giá cao tất cả những lời khuyên và câu trả lời, họ sẽ đi dọc theo con đường. – atwellpub

4

Sử dụng mysql_real_escape_string. Nó chỉ thoát khỏi các ký tự cần thiết trong khi liên quan đến mã hóa ký tự của kết nối MySQL của bạn.

+0

mysql_real_escape_string ($ variable); vẫn thoát khỏi dấu nháy kép. – atwellpub

+0

MySQL sẽ chèn chính xác "thay vì \" vào hàng. khi bạn CHỌN nó, nó sẽ hiển thị là "và không \". – Reece45

+0

Sau khi chạy \t mysql_real_escape_string (biến $); và sau đó đặt biến vào truy vấn; Tôi đã kiểm tra trong phpmyadmin của tôi và cả hai dấu ngoặc kép đơn và đôi được thoát trong mục nhập. – atwellpub

1

Nếu bạn sử dụng tham số truy vấn cho giá trị động, bạn không cần thực hiện bất kỳ thao tác thoát nào.

Bạn có thể sử dụng tham số truy vấn trong tiện ích mở rộng mysqli hoặc tiện ích mở rộng PDO (Tôi thích PDO). Tiện ích mở rộng mysql cũ không hỗ trợ tham số truy vấn.

4

Đơn giản str_replace("'", "\\'", $string) sẽ hoạt động. Nhưng như Gumbo đã nói ở trên, bạn nên sử dụng các hàm thư viện nếu bạn đang cố gắng thoát khỏi các truy vấn MySQL.

+0

Đây là câu trả lời hay nhất cho những người không truy vấn; ít nhất là đối với tôi, những người đang tạo tập tin lớp học. Nhìn thấy regex, tôi đã đăng bài 'str_replace ('\' ',' \\\ '', $ str)' cho đến khi tôi nhận thấy điều này. Tôi chỉ sử dụng dấu nháy đơn để tránh gọi kiểm tra biểu thức cho dấu ngoặc kép. –

11

Ok thực sự đã trễ bài đăng này nhưng thêm câu trả lời này hy vọng rằng nó có thể giúp ai đó hạ cánh tại câu hỏi này. Trong khi @Weston C đã đưa ra một giải pháp regex, có một chức năng php để làm this- addcslashes (http://php.net/manual/en/function.addcslashes.php):

string addcslashes (string $str , string $charlist) 
Returns a string with backslashes before characters that are listed in charlist parameter. 
Các vấn đề liên quan