Los saltos de línea ingresados en un textarea, no llegan de forma comprensible para el browser. Tenés que pasar el contenido de ese textarea por la función
nl2br() (new line to break).
Básicamente lo que hace es convertir todos los
\r\n
en tags
<br />
para que sean interpretados por el navegador.
En cuanto a "enumerar" el código, podés usar algo tan simple como esto:
Código PHP:
<?php
$valor = isset($_POST['texto']) ? $_POST['texto'] : false;
$exp = explode("\n", $valor);
$lineas = count($exp);
foreach ($exp as $index => $val) {
$index++;
echo $index.'. '.$val.'<br />';
}
?>
<form action="#" method="post">
<textarea name="texto"></textarea>
<input type="submit" value="Enviar" />
</form>
Saludos.