Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PHP MySQL, jak prawidłowo przechowywać / escape string

Upewnij się, że ustawiłeś double_encode na false , w przeciwnym razie już zakodowane ciągi zostaną ponownie zakodowane, obracając & w & . Następnie, gdy przejdziesz do wyświetlenia go po użyciu html_entity_decode , będzie wyglądać tak, jakby nadal był zakodowany.

Niepożądany wynik:http://ideone.com/uQxuAM

Używanie htmlentities($string, ENT_QUOTES, 'UTF-8', false); zapewni, że tak się nie stanie.

Następnie użyj html_entity_decode($string, ENT_QUOTES, 'UTF-8'); aby wyświetlić wartość.

Demo:http://ideone.com/8Jo7YA

Jednak MySQL jest w pełni zdolny do przechowywania zdekodowanych wartości w bazie danych.

Nigdy nie chcesz, aby w Twojej bazie danych były przechowywane ciągi zakodowane w htmlentities. Co się dzieje, gdy chcesz wygenerować plik CSV lub PDF, wysłać wiadomość e-mail lub cokolwiek, co nie jest HTML?

Oprócz tego, że musisz wykonać podwójne programowanie kodowania danych, zwiększając ilość danych w bazie danych, a następnie nadal musisz zdekodować dane wyjściowe, jest mnóstwo artykułów online, które odpowiadają, dlaczego nie powinieneś.

Tak więc powinieneś tylko kodować wartości, aby wyświetlić wynikowe dane wyjściowe w html.

Zamiast tego powinieneś zmienić wejście za pomocą 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) . "')";

lub jeszcze lepiej użyj przygotowanych wyciągów

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

Następnie sformatuj dane wyjściowe jako komunikat o sukcesie, aby wyświetlić, co zostało faktycznie dodane do bazy danych.

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

Teraz nie ma potrzeby używania html_entity_decode aby html był renderowany w przeglądarce.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie wartości Timestamp z bazy danych mysql przy użyciu szablonu Spring JDBC

  2. Przygotowane instrukcje PDO Klauzula IN z nazwanymi symbolami zastępczymi nie działa zgodnie z oczekiwaniami

  3. Wstaw 0 lub 1 do MySQL na podstawie wartości pola wyboru

  4. błąd unii sortowania

  5. tinyint (rozmiar), varchar (rozmiar):wyjaśnienie rozmiaru