¿Y porque usas todo ese royazo de función?
El problema viene por las funciones nativas de php que estás usando para leer y editar la cadena.
No es nada complicado lo que tratas de hacer y así no hay problemas con los caracteres.
Código PHP:
<?php
echo get_data_file("prueba.txt");
function get_data_file($path='')
{
if($archivo=file_get_contents($path))
{
$archivo = preg_split("/#/",$archivo);
$texto='';
foreach($archivo as $key1 => $datos)
{
$fila = preg_split("/[\s]+/",$datos);
if($key1!=0)
$texto.= "<b>".$fila[0]."</b><br>";
foreach($fila as $key2 => $value)
{
if($key2!=0) $texto.= $value;
if($key2==count($fila)-1) $texto.="<br>";
}
}
return $texto;
}
}
?>
Acabo de hacer el código pero ya ví que funciona correctamente utilizando el texto que pusiste, así que espero te sirva.
Supongo que se entiende bien.
Saludos.