miércoles, 24 de junio de 2009

Función muy útil para "resumir" párrafos que no queremos mostrar largos en la página. Añadirá puntos suspensivos y evita cortar texto por la mitad para que no quede '&aa' de 'á' y cosas similares.

function recortaTexto($string, $maxlen, $addon = '...')
{
if(strlen(strip_tags($string)) <= $maxlen)
{ // Ha de ser HTML válido
return $string;
}

//Tengo que comprobar que el $maxlen no esté cortando un á o algo similar, así que aumento
// maxlen hasta que el siguiente caracter sea un espacio

while ($string[$maxlen+2]!=' '){

$maxlen+=1;

}

$closing_tags = array();
$string = str_replace(chr(0), '', $string);
$string = preg_replace('/(<\/?[a-z][a-z0-9]*[^<>]*>)/im', chr(0) . '\\1' . chr(0), $string);
$result = explode(chr(0), $string);
for($i = 0, $n = count($result), $len = 0; $i < $n; $i++)
{
if($i % 2)
{
if(substr($result[$i], -2, 1) == '/')
{
continue;
}
if($result[$i]{1} == '/')
{
unset($closing_tags[array_search($result[$i], $closing_tags)]);
continue;
}
$closing_tags[$i] = '';
}
else
{
$len += strlen($result[$i]);
if($len >= $maxlen)
{
$len -= strlen($result[$i]);
break;
}
}
}


return implode('', array_slice($result, 0, $i)) . substr($result[$i], 0, $maxlen - $len) . $addon . implode(array_reverse($closing_tags));
}

viernes, 12 de junio de 2009

Caracteres  y problema "headers already sent"

He estado una temporada codificando con Aptana Studios y teniendo que usar el notepad para editar ciertos scripts, ya que Aptana parece completamente incapaz de mostrar caracteres latinos por mucho que intente modificarlo, motivo por el que voy a cambiar por completo a Zend Studio.

De vez en cuando las páginas me daban un error relativo al session_start sugiriendo que los headers ya se habían mostrado (headers already sent). Tras investigar, vi que se trataba de o bien el notepad estaba dejando algún carácter de codificación delante del primer carácter real o algo raro estaba pasando con la transición al Aptana posteriormente. Hoy empezó a aparecer además la combinación . Descubrí que si guardaba con el Wordpad el problema se solucionaba inmediatamente.

El notepad parece que guarda por defecto en UTF8, lo que provoca conflicto con el ISO-8859-1. Voy a recalcar, por lo tanto, que JAMÁS hay que editar un script en el notepad aunque sea una urgencia o parezca no haber alternativa de momento. Ahora estoy probando el PSPad, que será, asumo, competente.

lunes, 8 de junio de 2009

Limpiar las consultas SQL antes de enviarlas

Conviene usar la función mysql_real_escape_string.