我遇到了 filter_var()、preg_match() 和單引號的問題。我正在嘗試清理和驗證非法字符的姓氏。它幾乎適用于所有內容,但顯然姓氏中包含單引號(例如 O'Corner)會導致錯誤。我的意思是 $errors[] = '姓氏中請僅使用字母、句號、破折號和空格。'; 每當我在用戶輸入字段中使用單引號時就會執行。HTML 代碼:<input type="text" class="form-control" name="last_name" id="last_name" placeholder="Enter last name" maxlength="40" required value="<?php if (isset($_POST['last_name'])) { echo htmlspecialchars($_POST['last_name'], ENT_QUOTES); } ?>" title="Alphabets, quotes, dash, spaces and max 40 characters" pattern="^[a-zA-Z][a-zA-Z' -]*$">PHP代碼:$lname = filter_var($_POST['last_name'], FILTER_SANITIZE_STRING);if (!empty($lname)) { if (!preg_match("/^[a-zA-Z][a-zA-Z' -]*$/", $lname)) { $errors[] = 'Please use only alphabets, period, dash and spaces in last name.'; } else if (strlen($lname) > 40) { $errors[] = 'last name should not exceed 40 characters'; } else { $lname = trim($lname); }} else { $errors[] = 'Please enter your last name.';}我嘗試用反斜杠轉義正則表達式中的單引號。但這沒有用。如果我替換$lname = filter_var($_POST['last_name'], FILTER_SANITIZE_STRING);它$lname = $_POST['lname'];效果很好。但我仍然不確定使用包含單引號和 $lname = filter_var($_POST['last_name'], FILTER_SANITIZE_STRING); 的字符串有什么問題 使用 preg_match() 方法。有人可以幫助我嗎?先感謝您。
1 回答

largeQ
TA貢獻2039條經驗 獲得超8個贊
您的問題來自于對 filter_var 函數的特定調用正在將單引號 ' 編碼到 html 實體 ' 中。
如果您在瀏覽器中打印 $lname 變量,它將呈現為常規單引號,但在其源代碼中它不會是引號,而是提到的 html 實體。
- 1 回答
- 0 關注
- 102 瀏覽
添加回答
舉報
0/150
提交
取消