我有一個簡單的問題 - 用戶填寫表單,當表單POST'd時,我將數據存儲到HEREDOC並將其保存到可以在瀏覽器中打開和查看的文件。\ n在輸入標記中顯示爲 n - 在用戶輸入上使用htmlspecialchars()
問題是我無法弄清楚如何讓用戶輸入的文本輸入100%忠實地重新顯示在html'input'標籤中。
這裏是我的麻煩的用戶輸入的例子:
oh' mesquid"ly b\\n;"'
當我打開該文件,以重新顯示數據的位,它失敗,因爲引用的:
<input type="text" id="theSubject" value='oh' mesquid\"ly b\\n;\"''/>
所有我看到這個輸入字段是哦
所以我試了htmlspecialchars() - 這讓我差不多那裏 - 但我在我的示例文本字符串中'n'之前丟失了2個反斜槓之一,並且輸出看起來像 oh'mesquid「ly b \ N;「‘
下面的代碼 - ‘myTitle’在這裏得到了裝有上述哦’mesquid‘立法院b \ n’;」通過我的用戶,我輸進了表格,然後POST 'd的形式(和我在這裏預覽這個問題,我注意到,StackOverflow後文本輸入具有相同的問題 - 儘管我在本段的第一行中鍵入了兩個「\」反斜槓,因爲我查看在提交之前我的問題在這裏我注意到其中一個反斜槓丟失了,對此抱歉,我的控制)的:
<?php
$title = $_POST['myTitle'];
$theEscapedTitle = htmlspecialchars($title, ENT_QUOTES);
$html = <<<HEREDOC
<?php
\$title = '$theEscapedTitle';
?>
<!DOCTYPE html>
<html>
<body>
<input type="text" id="theSubject"value='<?php echo $title ?>'/>
</body>
</html>
HEREDOC;
file_put_contents("myFile.php", $html);
?>
當我打開「myFile.php」,上面的「input」標籤是這樣的:
<input type="text" id="theSubject" value='oh' mesquid"ly b\n;"''/>
爲什麼我失去了2個反斜槓的一個在我輸入文本字符串 oh'mesquid「ly b \ n;」'和我應該怎麼做忠實地重現文本字符串?
編輯
我下面一個可行的解決方案,不得不調整它一點,這裏的解決我的問題:
function reproduceBackslashesFaithfully($string)
{
$string = str_replace('\\','\\\\',$string);
$string = htmlspecialchars($string, ENT_QUOTES);
return $string;
}
當我通過這個功能包含了一倍反斜槓我的用戶的輸入,我現在看到在我上面的代碼中我的輸入標記中忠實地再現了那些雙反斜槓。我正在研究爲什麼下面Anonymous的答案中給出的函數參數的原始「傳遞參考」不適用於我,因爲PHP文檔指出傳遞引用函數參數應該在我的PHP版本5.3中工作0.5。
實現它爲什麼會進入一個文件? – 2014-01-12 23:05:44
@Dagon - 網站接受用戶輸入,並將其保存到一個文件中,以供日後查看,例如筆記記錄器等。用戶輸入他們想要的任何類型的文本輸入,然後我們創建一個他們可以在瀏覽器中稍後打開的網頁。 – CFHcoder
不是一個好主意。將真實內容寫入文件,而不是PHP腳本。 –