簡體   English   中英

DB 中的雙引號破壞 HTML 輸出

[英]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 &quot;test&quot; test &#039;test &#039;

並在瀏覽器中:

編碼所有這些“測試”測試 '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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM