簡體   English   中英

php :: textarea 中的新行?

[英]php :: new line in textarea?

通過php插入文本時如何在textarea中創建新行?

我以為是\\n ,但實際上是在 textarea 中打印出來的。

謝謝

沒有看到您的代碼,我無法確定,但我的猜測是您使用的是單引號 ('\\n') 而不是雙引號 ("\\n")。

如果字符串用雙引號括起來,PHP 只會評估轉義序列。 如果您使用 '\\n',PHP 只會將其視為文字字符串。 如果您使用“\\n”,PHP 將解析變量和轉義序列的字符串,並像您期望的那樣打印一個新行。

試試

$text = 'text line one' . PHP_EOL . 'text line two';
echo '<textarea>' . $text . '</textarea>';

將在 texarea 的修復行上添加每個文本。

PHP 端:從 Textarea 字符串到 PHP 字符串

$newList = ereg_replace( "\n",'|', $_POST['theTextareaContents']);

PHP 端:PHP 字符串回 TextArea 字符串:

$list = str_replace('|', '&#13;&#10;', $r['db_field_name']);

Alay Geleynse 說的是對的,我和你有同樣的問題,問題是由於存在轉義字符 (\\r,\\n)。 為了“取消轉義”變量,我使用了$var = stripcslashes($var)並且它顯示正確

回車

\n 
\r
<br />
^M

我已將\\p用於文本文件。 試試

2020 年 - 谷歌為了類似的事情把我帶到這里。

基於上述用戶@Va1iant 的回答

環境:

  • HTML 5 / 引導程序 4.5
  • php 7.3.x
  • 瑪麗亞數據庫 10.2.x

問題:

  • 帶有 textarea 的輸入表單(發布后沒有出現在數據庫中的 \\r\\n 問題)
  • 使用 textarea 編輯表單( \\r\\n 出現在 db 中,也出現在發布后的編輯表單中)

解決方法:

  • DB - textarea 內容的列類型設置為“varchar”
  • 編輯表單 - textarea(使用stripcslashes)內的內容的代碼片段如下所示
<?= isset($_POST['MailingAddress']) ? stripcslashes(misc::esc($_POST['MailingAddress'])) : misc::esc($data['current_mailing_address']) ; ?>

其中 misc::esc -> 返回 htmlspecialchars($var, ENT_QUOTES|ENT_HTML5, 'UTF-8');

注意:

我沒有嘗試使用空白:前行; 正如CSS Tricks所概述的那樣,這也可能是一個解決方案 - 不使用 stripcslashes。

只是為了完成該問題的解決方案,正如其他人提到的那樣使用"\\n" *(或在某些情況下"\\r\\n" )而不是'\\n'

當您想使用 php 顯示 textarea 內容並保留新nl2br ,您需要使用nl2br ,因此如果您為文本分配變量並將其稱為 $YOUR_TEXT ,則應使用該函數: nl2br($YOUR_TEXT)

可以在此處找到更多詳細信息


  • Unix 和 Unix 程序通常只需要換行\\n ,而 Windows 和 Windows 程序通常需要\\r\\n

如果您只需要使用nl2br()打印數據,則nl2br\\n轉換為<br /><br />不創建新行。 您應該將<br />替換為<br>然后這將起作用。

例子:

$content = "foo \n bar";
echo str_replace("<br />","<br>",nl2br($content));

結果:

foo
bar

如果您需要拆分它,您可以使用我的功能。 :D

function SplitLine($txt){
            $txt  = nl2br($txt);
            $txt = explode("<br />",$txt);
            return $txt;
            
        }

我將帶有textarea foo \\n bar作為POST方法發送到 php。

print_r(SplitLine($_POST['text_area']));

我的結果:

Array ( [0] => foo [1] => bar)

您可以使用for循環來獲取數據並打印它:

$result = SplitLine($_POST['text_area']);
for($i = 0;$i < count($result);$i++){
   echo $result[$i]."<br>";
}

結果是

foo
bar

完整代碼(僅用於測試):

<?php 
//MyFunction
function SplitLine($txt){
    $txt  = nl2br($txt);
    $txt = explode("<br />",$txt);
    return $txt;        
}
//My Code
if(isset($_POST['submit_data'])){
    print_r(SplitLine($_POST['text_area']));
}
?>
<br>
<form method='post'>
    <textarea name='text_area'></textarea>
    <br>
    <input type='submit' value='Send Data :)' name='submit_data' />
</form>

我有一個類似的問題,我的解決方案是雙重轉義換行符。 \\\\n

$row['content']=stripslashes($row['content']);
$row['content']=str_replace('<br />',"newline",$row['content']);
$row['content']=htmlentities($row['content']);
$row['content']=str_replace('newline',"<br>",$row['content']);

像這樣使用動態輸入您可以使用的每一行

echo chr(13)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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