TLDR; В дополнение к принятому ответу; Один неявный, а другой явный.
Когда HTML, который вы написали или сгенерировали приложением / библиотекой / фреймворком, читается вашим браузером, лучше всего понять, что имел в виду ваш HTML (который может варьироваться в зависимости от браузера) Когда вы используете коды сущностей HTML, вы более специфичны для браузера. Вы явно говорите, что хотите отобразить символ для пользователя (а не то, что вы просто добавляете интервалы в HTML для более удобного чтения, например, для разработчика).
Чтобы быть более конкретным, если бы выходной HTML был:
<html>
<title>hello</title>
<body>
<p>
Tell me and I will forget. Teach me and I
may remember. Involve me and I will learn.
</p>
</body>
</html>
Браузер будет отображать только один пробел между всеми этими словами (даже те, которые были с отступом для лучшей читабельности для разработчика.
Если, однако, вы поставили то же самое и изменили только тег <p>
на:
<p>Hello There</p>
Тогда он будет отображать пробелы, как вы указали это более явно. Существует некоторая история использования этих пространств для стилизации. Это использование было несколько уменьшено, поскольку CSS повзрослел. Тем не менее, все еще существуют допустимые применения для многих сущностей символов HTML: избегание неожиданного / непреднамеренного толкования (например, если вы хотите отобразить код). У w3 есть отличная страница для отображения других кодов символов .