top
Loading...
關于使用文本域(TextArea)的一個問題
limodou
我在使用表單處理信息時發現,對文本域的處理不正確。例如下面的一個表格:


--------------------------------------------------------------------------------
test.html

<html>
<head>
<title> TextArea Test </title>
</head>
<body bgcolor="#FFFFFF">
<form method="post" action="test.php">
文件名<input type="text" name="filename" value="test.txt"><br>
內容:<br>
<textarea name="content" cols="80" rows="20">"aaa" "bbb"</textarea><br>
<input type="submit" name="Submit" value="寫好了">
<input type="reset" name="Submit2" value="重寫">
</form>
</body>
</html>

test.php

<?
$fp=fopen($filename, "w");
fwrite($fp, $content);
fclose($fp);
echo "OK";
?>
--------------------------------------------------------------------------------

上面的例子是用來測試的,主要是想完成用戶可以輸入一個文件名,然后可以輸入文件的內容。確認后
可以在服務器上保存文件。下面簡單地說明一個兩個文件的內容。

test.html 中有一個表單,里面有一個文本框和一個文本域。文本框用來輸入要保存的文件名,文本域
用來輸入文件的內容。文件名缺省設為"test.txt",文件內容缺省設為"aaa" "bbb"。表單的動作為"post",
執行文件為"test.php"。

test.php則很簡單。打開指定文件,寫入文件內容,關閉文件,輸出"OK"。

原來我想文件內容應該是"aaa" "bbb",但結果并不是這樣,而是"aaa" \"bbb\"!在每一個雙
引號(")和反斜線()(其實還有單引號和空(nul))前都加上了一個轉義用的反斜線。這是為什么? 于是,我
查詢了PHP中文手冊,看到關于PHP.ini的配置中關于magic_quotes_gpc和magic_quotes_runtime的說明,我
知道了是因為PHP給自動處理了。這樣,我就將PHP.ini配置中的magic_quotes_gpc和magic_quotes_runtime
設成了off,結果就正確了。

但是如果服務器我無法改動怎么辦?于是又查閱了一下字串符處理函數,我發現stripslashes()函數就
可以完成這個工作。這樣首先把PHP.ini改成原來的樣子,再修改test.php如下:

--------------------------------------------------------------------------------
<?
$fp=fopen($filename, "w");
$content=stripslashes($content);
fwrite($fp, $content);
fclose($fp);
echo "OK";
?>
--------------------------------------------------------------------------------
再檢查結果,完全符合我的需要!

還有要注意的是,如果你想做一個修改文件內容的應用。如,首先把文件內容讀出來,放入到文本域中,
用戶可以進行修改。那么當文件中有特殊的符號,如"<",">","&" 符等,直接顯示就會與實際內容不符。
沒關系,PHP還提供了htmlspecialchars()函數將特殊字符轉換成HTML 的字串格式,這樣顯示與處理都是正
確的了。

這是我在處理文本域時發現的一個問題,希望能對你有幫助!

北斗有巢氏 有巢氏北斗