[英]apostrophe in PHP string
真奇怪 我有一個從數據庫獲取信息的表單,然后用詳細信息填寫表單。 我正在嘗試迎合一個人的名字,例如O'Neill。 在頁面頂部(實際表單本身之外)是一行,將用戶名回顯到屏幕上:
<h2>Member Details for <?php echo $thefn; ?></h2>
這確實可以正確顯示在頁面上,即Mike O'Neill的“成員詳細信息”。但是,以實際的形式運行代碼:
<td><?php echo "<input type='text' name='fname' value='$thefn' size='30' maxlength='30'>"; ?></td>
撇號消失后,名稱會顯示所有內容! 變量是一樣的,那我在做什么錯呢? 這讓我把頭發扯了(有很多!)
假設我的名字是:
' /><script type="text/javascript">alert("You've just been hacked!");</script><input type="hidden" name="lol" value='hax
怎么辦?
htmlspecialchars($thefn)
應該有幫助。
在HTML中使用雙引號" "
,如下所示:
echo "<input type='text' name='fname' value=\"$thefn\" size='30' maxlength='30'>";
請注意,您必須使用\\
進行轉義,因為您已經使用了雙引號來分隔字符串(在PHP中)。 另一種解決方案是在PHP端使用單引號( echo ' ';
),並在字符串內使用雙引號,這樣就無需轉義。
另請注意,此代碼容易受到XSS攻擊 ,您可以使用htmlspecialchars()
來防止這種情況,這是更正后的代碼(XSS和引號):
echo '<input type="text" name="fname" value="'.htmlspecialchars($thefn).'" size="30" maxlength="30">';
忽略這里明顯的安全性紅鯡魚(我假設您的$thefn
變量的格式對於在HTML中的單引號之間是正確的),我將PHP變量包裝在{}括號內,像這樣。 這有兩個主要優點。 一個-更容易發現可替換零件,此外,PHP清楚地知道了哪個零件是動態的。 二-您可以使用更高級的變量,例如數組。 {$my_array['my_key']}
。
<td>
<?php
echo "<input type='text' name='fname' value='{$thefn}' size='30' maxlength='30'>";
?>
</td>
另請參見: PHP字符串解析 (在手冊中)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.