sql >> Database teknologi >  >> RDS >> Mysql

PHP MySQL hvordan man korrekt gemmer / undslipper streng

Sørg for at indstille double_encode til false , ellers vil allerede kodede strenge blive kodet igen ved at dreje & ind i & . Når du derefter går for at vise det efter at have brugt html_entity_decode , vil det se ud, som om det stadig var kodet.

Uønsket resultat:http://ideone.com/uQxuAM

Brug af htmlentities($string, ENT_QUOTES, 'UTF-8', false); vil sikre, at dette ikke sker.

Brug derefter html_entity_decode($string, ENT_QUOTES, 'UTF-8'); for at vise værdien.

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

MySQL er dog fuldt ud i stand til at gemme de afkodede værdier i databasen.

Du ønsker aldrig at have htmlentities-kodede strenge gemt i din database. Hvad sker der, når du vil generere en CSV eller PDF, sende en e-mail eller noget, der ikke er HTML?

Bortset fra det faktum, at du skal udføre dobbelt programmering af kodning af data, øge mængden af ​​data i databasen, og så stadig skal afkode outputtet, er der tonsvis af artikler online, der svarer på, hvorfor du ikke burde.

Så du behøver kun at kode værdierne for at vise det resulterende dataoutput i html.

I stedet bør du undslippe input ved hjælp af 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) . "')";

eller endnu bedre brug forberedte udsagn

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

Derefter for at formatere output som en succesmeddelelse for at vise, hvad der faktisk blev tilføjet til databasen.

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

Nu er der ingen grund til at bruge html_entity_decode for at få html'en gengivet i browseren.



  1. SQLSTATE[HY000] [2002] Et forbindelsesforsøg mislykkedes.. - Ved forsøg på at oprette forbindelse fra lokal til fjernserver

  2. Sådan installeres MySQL med phpMyAdmin på Ubuntu 14.04

  3. PHP7.0-FPM med Docker:Kan ikke indlæse dynamisk bibliotek OCI8

  4. Søg i alle felter i alle tabeller for en bestemt værdi (Oracle)