[英]Double quotes in DB breaking HTML Output
我已經嘗試了所有方法,但仍然無法弄清楚。 addslahes()
、 str_replace()
、 htmlentities()
,我就是不明白為什么我的網站上沒有顯示雙引號。
$sql = $con->prepare("SELECT * FROM `user_settings` WHERE `user_session` = '$user_session'");
$sql -> execute();
$result = $sql->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
$advertising_1 = $row['advertising_1'];
$advertising_2 = $row['advertising_2'];
$website_name = $row['website_name'];
$website_url = $row['website_url'];
$statistics = $row['statistics'];
}
echo '<input type="text" name="website_name" placeholder="Your Website URL" value="'. $website_name. '" />' ?>
有人可以解釋我在這里出錯的地方嗎? 我的字符串中出現雙引號問題。 單引號已用 mysql_escape 修復,但它似乎已被棄用。
您需要使用htmlspecialchars轉義要輸出到瀏覽器的數據並使用引號常量 (ENT_QUOTES),以便所有引號都轉換為實體。 請注意,這也是防止/執行 XSS 注入的方式。 元素/屬性在它們不應該關閉時被關閉,然后編寫惡意代碼。
echo htmlspecialchars('Encode all of these "test" test \'test \'', ENT_QUOTES);
輸出:
Encode all of these "test" test 'test '
並在瀏覽器中:
編碼所有這些“測試”測試 'test'
同樣從您顯示的代碼中,您正在濫用准備好的語句。 值需要綁定,而不是連接到您的查詢。 這樣 PDO 驅動程序將處理引用/轉義。 如果您繼續使用它,這可能會在未來為您帶來類似的問題。 還可以讓您了解 SQL 注入。
有關准備好的語句的更多信息,請參閱: http : //php.net/manual/en/pdo.prepared-statements.php
您需要在語句上使用不帶變量的准備,然后將它們作為數組添加到 execute() 中,如下所示:
$sql ="SELECT * FROM `user_settings` WHERE `user_session` = ?";
$stmt = $con->prepare($sql);
$stmt->execute([$user_session]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.