Ese monton de str_replace(9 q usas .. se podria resumir en:
Código PHP:
$mensaje=htmlentities(stripslashes($mensaje));
htmlentities() hace justo la parte de tus str_replace de $mensaje = str_replace("<","<",$mensaje); y no solo esos caracteres .. sino alguno mas tambien.
stripslashes() te quita los caracteres de escape q se añaden cuando usas comillas dobles o simples y \ ...
Lo de limitar a X numero de caracteres .. podrias usar:
wordwrap();
http://www.php.net/manual/en/function.wordwrap.php
(revisa los comentarios de los usuarios .. hay alternativas y comentarios q te pueden interesar al respecto).
Eso lo deberias usar antes de presentar la variable q contiene el mensaje y q debes de formatearla a X caracteres por linea .. (en tu caso despues de tus str_replace . o de la linea de codigo q te comenté q hace lo mismo ...
Código PHP:
$mensaje = wordwrap( $mensaje, 25, "<br>", 1);
Un saludo,