開發者常遇到詭異現象:HTML 表單的 <textarea> 資料經 PHP 寫入 MySQL 後,再次讀取顯示時首尾卻多出大量空格,但直接查詢資料庫卻並無空格。這其實是瀏覽器渲染與原始碼格式化導致的「視覺誤差」。
為了程式碼可讀性,開發者習慣在 <textarea> 標籤間換行並縮排:
<textarea>
這裡是內容
</textarea>
瀏覽器會將標籤間的換行符(\r\n)與縮排空格視為文字內容一併提交,導致資料庫存入不可见字元。資料庫客戶端查詢時通常會修剪顯示,故看似無空格。
使用 str_replace 或 strtr 移除全形/半形空格及換行符:
<?php
// 移除所有空格(含全形)
echo str_replace([' ', ' ', "\r", "\n", "\r\n"], '', $content);
// 或使用 strtr 批量轉換
echo strtr($content, [' ' => '', ' ' => '', "\r" => '', "\n" => '']);
?>
在模板中緊貼標籤輸出變數,不留任何縮排:
<textarea><?php echo $content; ?></textarea>
PHP 接收到的 Textarea 換行符為 雙字元 \r\n(CRLF),而非單一 \n、<br /> 或字面字串 '\r\n'。處理換行轉換時請針對 \r\n 進行 nl2br() 或正則替換。
掌握「輸入端規範、輸出端過濾」雙重保險,徹底杜絕 Textarea 空格困擾。