sql >> Database >  >> RDS >> Mysql

PHP MySQL hoe string correct op te slaan / te ontsnappen

Zorg ervoor dat u de double_encode . instelt naar false , anders worden reeds gecodeerde strings opnieuw gecodeerd, waarbij & in & . Wanneer u het vervolgens gaat weergeven na het gebruik van html_entity_decode , zal het lijken alsof het nog steeds gecodeerd is.

Ongewenst resultaat:http://ideone.com/uQxuAM

Met behulp van htmlentities($string, ENT_QUOTES, 'UTF-8', false); zal ervoor zorgen dat dit niet zal gebeuren.

Gebruik dan html_entity_decode($string, ENT_QUOTES, 'UTF-8'); om de waarde weer te geven.

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

MySQL is echter volledig in staat om de gedecodeerde waarden in de database op te slaan.

U wilt nooit met htmlentities gecodeerde tekenreeksen in uw database hebben. Wat gebeurt er als u een CSV of PDF wilt genereren, een e-mail wilt verzenden of iets anders dat geen HTML is?

Afgezien van het feit dat je het dubbele programmeren van het coderen van de gegevens moet uitvoeren, de hoeveelheid gegevens in de database moet vergroten en dan nog steeds de uitvoer moet decoderen, zijn er talloze artikelen online die antwoorden waarom je dat niet zou moeten doen.

U hoeft dus alleen de waarden te coderen om de resulterende gegevensuitvoer in html weer te geven.

In plaats daarvan moet je ontsnappen aan de invoer met 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) . "')";

of beter nog, gebruik voorbereide verklaringen

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

Om vervolgens de uitvoer op te maken als een succesbericht om weer te geven wat er daadwerkelijk aan de database is toegevoegd.

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

Nu is het niet nodig om html_entity_decode te gebruiken om de html in de browser te laten renderen.



  1. Error (2,7):PLS-00428:er wordt een INTO-clausule verwacht in deze SELECT-instructie

  2. MySql Index toevoegen:0 rijen beïnvloed

  3. Ik krijg veel select @@session.tx_read_only, zou iemand hetzelfde doen?

  4. Wat is de root-fout achter Kan geen databaseverbinding tot stand brengen. Controleer verbindingsreeks, gebruikersnaam en wachtwoord.