Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP MySQL cách lưu trữ / thoát chuỗi đúng cách

Đảm bảo bạn đặt double_encode thành false , nếu không, các chuỗi đã được mã hóa sẽ được mã hóa lại, chuyển & thành & . Sau đó, khi bạn hiển thị nó sau khi sử dụng html_entity_decode , nó sẽ xuất hiện như thể nó vẫn được mã hóa.

Kết quả không mong muốn: http://ideone.com/uQxuAM

Sử dụng htmlentities($string, ENT_QUOTES, 'UTF-8', false); sẽ đảm bảo điều này sẽ không xảy ra.

Sau đó, sử dụng html_entity_decode($string, ENT_QUOTES, 'UTF-8'); để hiển thị giá trị.

Bản trình diễn: http://ideone.com/8Jo7YA

Tuy nhiên, MySQL hoàn toàn có khả năng lưu trữ các giá trị đã giải mã trong cơ sở dữ liệu.

Bạn không bao giờ muốn lưu trữ các chuỗi mã hóa htmlentities trong cơ sở dữ liệu của mình. Điều gì xảy ra khi bạn muốn tạo CSV hoặc PDF, gửi email hoặc bất kỳ thứ gì không phải là HTML?

Ngoài việc bạn phải thực hiện gấp đôi lập trình mã hóa dữ liệu, tăng lượng dữ liệu trong cơ sở dữ liệu, sau đó vẫn cần giải mã đầu ra, có rất nhiều bài báo trực tuyến giải đáp lý do tại sao bạn không nên làm vậy.

Vì vậy, bạn chỉ cần mã hóa các giá trị để hiển thị kết quả đầu ra dữ liệu trong html.

Thay vào đó, bạn nên thoát khỏi đầu vào bằng mysqli_real_escape_string

$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>';
$sql = "INSERT INTO links (link)"
     . "VALUES(" . mysqli_real_escape_string($string) . "')";

hoặc tốt hơn là sử dụng các báo cáo đã chuẩn bị sẵn

$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();

Sau đó, định dạng đầu ra dưới dạng thông báo thành công để hiển thị những gì đã thực sự được thêm vào cơ sở dữ liệu.

$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";

Bây giờ không cần sử dụng html_entity_decode để html được hiển thị trong trình duyệt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL lấy bản ghi ngày cuối cùng từ nhiều

  2. MySQL - Mac - Lỗi 2002 - Không thể kết nối với cục bộ ... thông qua socket

  3. MySQL và đánh bóng từ

  4. Ứng dụng Spring mất kết nối với MySql sau 8 giờ. Làm thế nào để cấu hình đúng?

  5. Biểu đồ Primefaces 5.0 - cách tạo mô hình biểu đồ và chuỗi hoàn toàn động từ các giá trị cơ sở dữ liệu