簡體   English   中英

為什么htmlentities在每行末尾的文本區域內添加2條額外的新行?

[英]Why is htmlentities adding 2 extra new lines inside a textarea at the end of each line?

我有一個帶有textarea的表單,用戶可以在其中寫下有關自己的信息。 我正在用PHP處理表單,並將textarea的值存儲在Mysql DB中。 當我從數據庫中檢索該值並再次在textarea中輸出它時,用戶可以編輯他們寫的內容,這是我使用htmlentities函數編碼特殊的html字符的結果。 問題在於此函數向它發現的每個\\ r \\ n添加2條額外的新行。 例如,如果我在數據庫中的值是

Hello,

My name is ___.

I am a ______ .

當我使用htmlentities將其輸出到textarea時,顯示的內容是:

Hello,



My name is ____ .



I am a _______ .

當我在textarea中打印值時,這是我正在使用的功能:

function profile_input_about( $profile_obj = false ) {
    $profile_about = ( $profile_obj ) ? htmlentities( $profile_obj->about, ENT_QUOTES | ENT_HTML5, 'UTF-8' ) : '';

    print $profile_about;
}

如果我避免使用htmlentities或使用htmlspecialchars,則不會發生這種情況。 有什么線索嗎?

UPDATE

我做了一個獨立的測試:

<?php
    $text = "Hello there,\r\nThis is a test.\r\nWhat do you see?";
?>
<!DOCTYPE html>
<html>
<body>
    <textarea><?php print htmlentities( $text, ENT_QUOTES | ENT_HTML5, 'UTF-8' ) ?></textarea>
    <textarea><?php print htmlspecialchars( $text, ENT_QUOTES | ENT_HTML5, 'UTF-8' ) ?></textarea>
</body>
</html>

htmlentities()肯定會添加一個額外的\\ n。

結果是:

Hello there,

This is a test.

What do you see?

Hello there,
This is a test.
What do you see?

如果我不使用ENT_HTML5標志,問題將消失。 它按原樣顯示文本。

這應該是這樣還是這是一個PHP錯誤?

編輯-

根據文檔,使用htmlentities ,“將所有具有HTML字符實體等效項的字符轉換為這些實體。” 意思是, \\r被解釋為具有等效於\\n的HTML字符實體,因此您有兩行新內容。

使用htmlspecialchars ,僅翻譯諸如引號, </> &類的字符。 \\r\\n保持不變,導致在每行文本之間僅出現一個新行標記的預期結果。

暫無
暫無

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

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