[英]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,則不會發生這種情況。 有什么線索嗎?
我做了一個獨立的測試:
<?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.