Una aclaración @maycolAlvarez
el tag <code> No preserva los saltos de linea.
Se pueden usar htmlentities() como indicás. Además la etiqueta apropiada para mostrar texto como tal y no como código, que es
<textarea>
Puntualmente en el caso del ampersand (que hay que convertirlo en todos los casos), se representa con
&amp;
ejemplo
Código HTML:
Ver original
&amp;
<>
&
</textarea>
<hr />
<code>
<b>aaaa</b>
&amp;
<>
&
</code>
<hr />
<pre>
<span>aaaa</span>
<span>aaaa</span>
&amp;
<>
&
</pre>
Saludos