我正在處理來自用戶的資料,在這兩種情況下都使用 filter_var() 進行清理和驗證。然后將其存盤在資料庫中,稍后在站點的不同頁面上訪問。我使用 htmlspecialchars($var, ENT_QUOTES); 轉義輸出;
但是,如果用戶在其輸入中的任何一點輸入單引號或雙引號,它會顯示為 " 雙引號和 ' 單引號。它也在資料庫中存盤為 " 和 '
我需要瀏覽器來呈現實際報價而不是這段代碼。
我在 stackoverflow 上到處查看,但似乎無法找到我的問題的具體答案。
下面是一些經過清理的資料的片段- 然后驗證資料的長度,以及它是否為空,以及在某些情況下(如郵政編碼)的格式。
$contact_postal = filter_var($_POST['contact-postal'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$contact_address = filter_var($_POST['contact-address'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$contact_person = filter_var($_POST['contact-person'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$contact_person_phone = filter_var($_POST['contact-person-phone'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$contact_additional_details = filter_var($_POST['contact-additional-details'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
下面是一些被檢索以供顯示的資料
$postal_code = htmlspecialchars(safeDecrypt($row['postal_code'], $enc_key), ENT_QUOTES);
if (!empty($row['address'])) $address = htmlspecialchars(safeDecrypt($row['address'], $enc_key), ENT_QUOTES);
$contact_person = htmlspecialchars($row['contact_person'], ENT_QUOTES);
if (!empty($contact_person) && !empty($contact_person_phone)) $contact_person_phone = htmlspecialchars(safeDecrypt($row['contact_person_phone'], $enc_key), ENT_QUOTES);
$contact_details = htmlentities($row['contact_details'], ENT_QUOTES, "UTF-8"); //used alternatively to test (but same problem occurs)
safeDecrypt 函式只是對之前加密的資料進行解密。這是極不可能的問題,因為無論有沒有問題都會發生。
uj5u.com熱心網友回復:
如果您想阻止htmlspecialchars轉換,'或者"您可以使用該ENT_NOQUOTES標志,例如:
$contact_details = htmlentities($row['contact_details'], ENT_NOQUOTES, "UTF-8");
htmlspecialchars 檔案
如果您想在使用時保留引號,filter_var可以使用FILTER_FLAG_NO_ENCODE_QUOTESeg
$contact_postal = filter_var($_POST['contact-postal'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_NO_ENCODE_QUOTES);
消毒過濾器
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367903.html
標籤:php 验证 逃跑 htmlspecialchars
下一篇:如何驗證屬性是否屬于某個用戶
