簡體   English   中英

在 PHP 中對用戶輸入使用正則表達式

[英]Using Regular Expressions with user input in PHP

我想知道是否有人知道如何解決這個問題。

我正在從 HTML 表單收集用戶輸入,然后使用htmlspecialchars將其發布到 PHP 中,以避免在使用引號/等時出現問題...

但是,我還想對通過正則表達式收集的數據運行服務器端驗證檢查 - 盡管我不確定如何進行。

到目前為止,我已經考慮過解碼 htmlspecialchars - 但是因為我將立即使用字符串,這意味着在我運行此轉換后代碼可能會中斷。 例如:假設用戶在一個字段中輸入了一個單引號" 。這將被轉換為" ,然后如果我解碼它並在變量中使用它,它最終可能會像: $string = " " "; 這會給我帶來問題。

對此的任何建議將不勝感激!

您似乎誤解了數據之間的區別以及如何將這些數據更改為在特定上下文中可解析。

一個 php 字符串可以包含任何數據。 這個字符串中存儲的是“原始”形式:如果需要,我們希望以這種形式操作數據。

在某些情況下,並非所有字符都有效。 例如,在 html textarea 中, <>字符可能不被使用,因為它們是特殊字符。 我們仍然希望能夠使用這些字符。 為了在上下文中使用特殊字符,我們對這些字符進行轉義 通過轉義特殊字符,它會失去其特殊含義。 在 html textarea 的上下文中, <字符被轉義為序列&lt; . <字符不同,這個轉義序列在 html 中沒有特殊含義,因此如果我們將以下序列發送到瀏覽器,它知道如何解析該序列並顯示正確的內容: <textarea>&lt;</textarea> . 當我們談論這個 textarea 包含的數據是什么時,我們不會說它包含&lt; ,但我們說它包含<

正如您所說,在php腳本中,在雙引號字符串中, "字符具有特殊含義。這解析有關。PHP根本不知道如何解析序列$str = """; . 如果我們想在這樣的雙引號字符串中使用雙引號,我們需要對它進行轉義。 我們通過在 php 雙引號字符串前面加上\\轉義雙引號。 要創建包含單雙引號的字符串,使用雙引號表示法,您可以編寫$str = "\\"";

然而,這些都不重要。 . 您正在從 html 表單中獲取輸入。 當您單擊提交按鈕時,瀏覽器會讀取 textarea( 中的內容,並將其解碼為 html ? )。 瀏覽器然后按照表單標簽規定的方式對其進行編碼,並將其發送到服務器。 然后服務器將文本塊解碼回原始數據形式。 該數據將傳遞給 PHP,您將在$_POST['myTextarea']遇到這種形式。

結論:如果數據已編碼,請了解它是針對哪個上下文進行編碼的,並根據該上下文對其進行解碼。 您不需要為 php 引用的字符串轉義,因為您正在處理內部字符串。 沒有什么可以解析的。 提醒自己,當您打算在某處使用數據時,您應該注意該特定上下文的數據中的所有特殊字符都已轉義。

我想將表單發布到 PHP調用htmlspecialchars()函數。 最簡單的解決方案是首先匹配正則表達式,然后執行htmlspecialchars()

另外,如果你htmlspecialchars()編碼的字符串,在用htmlspecialchars_decode()解碼后,PHP 內部表示將是"\\"" ,所以你不會破壞任何東西。如何手動將字符串寫入 PHP 文件以及 PHP 如何內部處理它們。你真的不需要為此煩惱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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