为什么htmlentities在每行末尾的文本区域内添加2个额外的新行


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

我有一个带有文本区的表单,用户可以在其中写关于自己的内容。我用PHP处理表单,并在Mysql数据库中存储textarea的值。当我从DB检索值并在文本区再次输出它时,用户可以编辑他们所写的内容,我使用htmlentities函数来编码特殊的html字符。问题是这个函数为它找到的每个'r'n添加了2个额外的新行。例如,如果我在DB中的值是

<>之前你好,我的名字是___。我是______。之前

当我使用htmlentities将其输出到文本区域时,显示的是:

<>之前你好,我叫____。我是_______。之前

当我打印文本区域内的值时这是我使用的函数:

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。

结果如下:

<>之前你好,这是一个测试。你看到了什么?之前

<>之前你好,这是一个测试。你看到了什么?之前

如果我不使用ENT_HTML5标志,问题就会消失。

这应该是这样的还是这是一个php错误?

EDITED -

根据文档,使用htmlentities,"所有具有HTML字符实体等价物的字符都被翻译成这些实体。"这意味着,'r被解释为具有相当于'n的HTML字符实体,因此您有两个新行。

对于htmlspecialchars,只翻译引号、</>&等字符。'r'n仍然存在,导致预期的结果是每行文本之间只有一个新的行标记。