簡體   English   中英

PHP字符串中的撇號

[英]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.

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