Eliminar tags HTML en javascript

Este es un truco super simple para eliminar tags HTML de un String con javascript.
Resulta muy útil si alguna vez utilizáis un editor de texto como tinyMCE, FCKeditor o similares, que permiten editar texto dándole cierto formato, añadiendo tags HTML para conseguir ese formato. Si necesitáis realizar una validación del número de caracteres que el usuario ha escrito pero no queréis contar los tags añadidos pódeis utilizar el siguiente truco:


//Función que devuelve la longitud del texto que se ha escrito en un Editor (TinyMCE) sin contar los tags HTML
function getlengthcaja(caja) {

var oEditor = tinyMCE.getInstanceById(caja) ;

//Se crea un elemento div, aunque podría ser cualquier otro (span, p, ...)
var mydiv = document.createElement("div");

//Aquí vamos a almacenar el contendio del Editor de texto
var contenido_sinTags;

//Metemos el contenido del editor de texto en el div que hemos creado antes
mydiv.innerHTML = oEditor.getContent();

//Si se trata de IE
if (document.all){

contenido_sinTags=mydiv.innerText;
//Este es el KIT, La MAGIA, EL que Obtiene el texto sin tags

//Ahora un poco de expresiones regulares para eliminar los saltos de línea y los retornos de carro
re = new RegExp('\\n', 'gi');
contenido_sinTags=contenido_sinTags.replace(re,'');
re = new RegExp('\\r', 'gi');
contenido_sinTags=contenido_sinTags.replace(re,'');

}
// Mozilla does not work with innerText
else {

contenido_sinTags=mydiv.textContent;
//Este es el KIT, La MAGIA!!, EL que Obtiene el texto sin tags.

//Ahora un poco de expresiones regulares para eliminar los saltos de línea y los retornos de carro
re = new RegExp('\\n', 'gi');
contenido_sinTags=contenido_sinTags.replace(re,'');
re = new RegExp('\\r', 'gi');
contenido_sinTags=contenido_sinTags.replace(re,'');

}

//Devolvemos la longitud del texto, sin tags HTML ni retornos de carro ni saltos de línea
return contenido_sinTags.length;

}


El objeto RegExp se utiliza en javascript para generar expresiones regulares. Podría utilizarse un String directamente pero, en ese caso la sintaxis para escapar caracteres especiales es diferente.
new RegExp('\\n', 'gi');
'\\n' --> representa el \n (nueva línea)
'gi' --> g: para hacer una búsqueda global, en lugar de parar en la primera coincidencia; i: Ignorar mayúsculas y minúsculas
Más info sobre RegExp en: http://www.w3schools.com/jsref/jsref_obj_regexp.asp

Método en PL SQL para entidades html

Este es un método para poder convertir facilmente todos los caracteres en entidades HTML

CREATE OR REPLACE FUNCTION ASCII2HTML(cadena VARCHAR2)RETURN VARCHAR2 IS
text VARCHAR2(4000);
BEGIN
text := cadena;
text := REPLACE(text,'À',CHR(38)||'Agrave;');
text := REPLACE(text,'Á',CHR(38)||'Aacute;');
text := REPLACE(text,'Â',CHR(38)||'Acirc;');
text := REPLACE(text,'Ã',CHR(38)||'Atilde;');
text := REPLACE(text,'Ä',CHR(38)||'Auml;');
text := REPLACE(text,'Å',CHR(38)||'Aring;');
text := REPLACE(text,'Æ',CHR(38)||'AElig;');
text := REPLACE(text,'Ç',CHR(38)||'Ccedil;');
text := REPLACE(text,'È',CHR(38)||'Egrave;');
text := REPLACE(text,'É',CHR(38)||'Eacute;');
text := REPLACE(text,'Ê',CHR(38)||'Ecirc;');
text := REPLACE(text,'Ë',CHR(38)||'Euml;');
text := REPLACE(text,'Ì',CHR(38)||'Igrave;');
text := REPLACE(text,'Í',CHR(38)||'Iacute;');
text := REPLACE(text,'Î',CHR(38)||'Icirc;');
text := REPLACE(text,'Ï',CHR(38)||'Iuml;');
text := REPLACE(text,'Ð',CHR(38)||'ETH;');
text := REPLACE(text,'Ñ',CHR(38)||'Ntilde;');
text := REPLACE(text,'Ò',CHR(38)||'Ograve;');
text := REPLACE(text,'Ó',CHR(38)||'Oacute;');
text := REPLACE(text,'Ô',CHR(38)||'Ocirc;');
text := REPLACE(text,'Õ',CHR(38)||'Otilde;');
text := REPLACE(text,'Ö',CHR(38)||'Ouml;');
text := REPLACE(text,'Ø',CHR(38)||'Oslash;');
text := REPLACE(text,'Ù',CHR(38)||'Ugrave;');
text := REPLACE(text,'Ú',CHR(38)||'Uacute;');
text := REPLACE(text,'Û',CHR(38)||'Ucirc;');
text := REPLACE(text,'Ü',CHR(38)||'Uuml;');
text := REPLACE(text,'Ý',CHR(38)||'Yacute;');
text := REPLACE(text,'Þ',CHR(38)||'THORN;');
text := REPLACE(text,'ß',CHR(38)||'szlig;');
text := REPLACE(text,'à',CHR(38)||'agrave;');
text := REPLACE(text,'á',CHR(38)||'aacute;');
text := REPLACE(text,'â',CHR(38)||'acirc;');
text := REPLACE(text,'ã',CHR(38)||'atilde;');
text := REPLACE(text,'ä',CHR(38)||'auml;');
text := REPLACE(text,'å',CHR(38)||'aring;');
text := REPLACE(text,'æ',CHR(38)||'aelig;');
text := REPLACE(text,'ç',CHR(38)||'ccedil;');
text := REPLACE(text,'è',CHR(38)||'egrave;');
text := REPLACE(text,'é',CHR(38)||'eacute;');
text := REPLACE(text,'ê',CHR(38)||'ecirc;');
text := REPLACE(text,'ë',CHR(38)||'euml;');
text := REPLACE(text,'ì',CHR(38)||'igrave;');
text := REPLACE(text,'í',CHR(38)||'iacute;');
text := REPLACE(text,'î',CHR(38)||'icirc;');
text := REPLACE(text,'ï',CHR(38)||'iuml;');
text := REPLACE(text,'ð',CHR(38)||'eth;');
text := REPLACE(text,'ñ',CHR(38)||'ntilde;');
text := REPLACE(text,'ò',CHR(38)||'ograve;');
text := REPLACE(text,'ó',CHR(38)||'oacute;');
text := REPLACE(text,'ô',CHR(38)||'ocirc;');
text := REPLACE(text,'õ',CHR(38)||'otilde;');
text := REPLACE(text,'ö',CHR(38)||'ouml;');
text := REPLACE(text,'ø',CHR(38)||'oslash;');
text := REPLACE(text,'ù',CHR(38)||'ugrave;');
text := REPLACE(text,'ú',CHR(38)||'uacute;');
text := REPLACE(text,'û',CHR(38)||'ucirc;');
text := REPLACE(text,'ü',CHR(38)||'uuml;');
text := REPLACE(text,'ý',CHR(38)||'yacute;');
text := REPLACE(text,'þ',CHR(38)||'thorn;');
text := REPLACE(text,'ÿ',CHR(38)||'yuml;');
return(text);
EXCEPTION
WHEN NO_DATA_FOUND THEN
return '';
END ;

Como enviar E-mails desde Java

Aqui os dejo el codigo de como enviar un e-mail desde Java. En el mail incorporamos texto en el cuerpo así como un fichero adjunto.


import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import javax.mail.internet.MimeMultipart;

....

public static void sendMail(){
String remite, remitente, asunto, destino, textoMail = "";
String host = "smtp.XXXXXX";
String port = ""; //en caso de que haya, incorporar el puerto de comunicación.
String username = "username";
String password = "password";
try{
remite = "administracion@java4mochuelos.es";
remitente = "El administrador de java4mochuelos";
asunto = "Un mensaje muy interesante";

//Los usuarios a quin dirigimos el mail se separan por ";"
destino = "usuario1@java4mochuelos.es;usuario2@java4mochuelos.es";

textoMail= "Cuerpo del mensaje en HTML";

String[] direcciones;

String destinatario=destino;

Properties props = new Properties();
if(username != null && username.length()>0){
props.put("mail.smtp.auth", "true");
}

Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);

message.setFrom(new InternetAddress(remite, remitente));

//Multiples destinos

if(destinatario.indexOf(";") > 0){
direcciones = destinatario.split(";");
for(int i = 0; i < destino =" direcciones[i].trim();">0){
message.addRecipient(Message.RecipientType.TO, new InternetAddress(destino));
}
}
}else{
message.addRecipient(Message.RecipientType.TO, new InternetAddress(destinatario));
}

message.setSubject(asunto);

//--Cuerpo del mensaje en HTML--
BodyPart bodyPart1 = new MimeBodyPart();
bodyPart1.setContent(textoMail, "text/html");
//-------------

//---fichero---
BodyPart bodyPart2 = new MimeBodyPart();
FileDataSource fileDataSource = new FileDataSource("");
bodyPart2.setDataHandler(new DataHandler(fileDataSource));
bodyPart2.setFileName(fileDataSource.getName());
//-------------

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(bodyPart1);
multipart.addBodyPart(bodyPart2);

message.setContent(multipart);

message.saveChanges();
Transport transport = session.getTransport("smtp");
if(username != null && username.length()>0){
if(port != null && port.length()>0){
transport.connect(host, Integer.parseInt(port), username, password);
}else{
transport.connect(host, username, password);
}
}
transport.sendMessage(message, message.getAllRecipients());
transport.close();

}catch(Exception e){
System.out.println("sendMail: "+ e);
}
}



Como podeis observar será necesario incluir las librerias mail y activation de java.

¿Reparar el GRUB 1?


Si te instalas de cero la nueva versión de Ubuntu 9.10, verás que la configuración del GRUB no se realiza ya a través del menu.lst. Esto es porque han migrado a la nueva versión del GRUB (GRUB2).

Esta entrada va dedicada para aquellos que siguen utilizando la versión 1 del GRUB. Bien porque hayan actualizado su Ubuntu desde una versión anterior y hayan conservado la versión del GRUB, bien porque no les guste la nueva versión. O porque utilizáis una distribución de linux que sigue utilizando GRUB 1.


Si haciendo cosas raras con vuestro ordenador se os ocurre instalar
más de un SO, entre ellos un Ubuntu, por ejemplo, puede que tarde o temprano acabéis perdiendo el arranque de alguna de las particiones. Pero no pasa nada, que no cunda el pánico!!! Vuestro amigo el GRUB os puede ayudar.


Vamos a suponer que tenemos un disco duro (hda) con 4 particiones primarias (sda1, sda2, sda3, sda4) que es el máximo número de particiones primarias que podemos tener en un disco. Esto es para simplificar un poco el tema.
En sda1 tenemos Ubuntu, en sda2 swap en sda3 Windows, en sda4 datos en FAT 32
Hemos instalado un nuevo SO y se ha cargado el gestor de arranque que teníamos inicialmente en nuestro Ubuntu.

Afortunadamente disponemos del CD de Ubuntu (anterior a Karmic Koala, 9.10, para que tenga el GRUB1) y podemos arrancarlo en
modo live. También podemos entrar en modo live con un pendrive. O puede que tengamos una partición con otro Linux que podemos arrancar. Cualquiera de los tres casos es equivalente, ya que lo único que queremos es reparar el GRUB en una partición perdida.

Una vez que hemos conseguido arrancar un linux (live o partición) en nuestro ordenador tenemos que hacer lo siguiente:

Primero
montamos la partición en la que se encuentra nuestro ubuntu, por ejemplo yo he elegido para montarlo la carpeta /media/ubuntu
@>mount /dev/sda1 /media/ubuntu

Después le decimos al
GRUB que se instale en la carpeta boot del ubuntu
@>grub-install --root-directory=/media/ubuntu/boot /dev/hda

Con esto ya tenemos el gestor de arranque cargado en nuestra partición de ubuntu.
Puede que tengamos que
modificar el fichero /boot/grub/menu.lst Ya que la instrucción anterior no genera una nuevo. Seguramente tendrás uno de la instalación inicial y quizá algunas copias.


Aquí van algunos notas de como
agregar entradas al fichero menu.lst

Utilidades para añadir manualmente nuevas entradas al fichero /boot/grub/menu.lst
df -h --> Para ver el espacio disponible en la partición actual
fdisk -l --> Para ver la tabla de particiones de los discos
ls -l /dev/disk/by-uuid -->Para ver los UUID asignados a cada partición.

Por ejemplo yo tengo una distribución de Linux (Backtrack 4) en la partición extendida /dev/sda6. Esto sería la forma más sencilla de crear una entrada del grub

title Backtrack 4
root (hd0,5)
kernel /boot/vmlinuz-2.6.29.4 rw root=/dev/sda6
initrd /boot/initrd.img-2.6.29.4

title --> puedes poner lo que quieras es lo que mostrará el GRUB cuando arranque
root --> indica en qué partición está el SO. hd0 (el primer disco duro); 5 la sexta partición
kernel --> ruta al fichero del kernel que se ha de cargar
initrd --> si existe un fichero initrd pues se pone en esta línea (creo que tiene que ver con la carga de módulos)


Si en lugar de poner las rutas a las particiones (/dev/sdaX) queremos utilizar UUID. Entoces arrancamos la partición en la que está instalado el GRUB y ahí ejecutamos el siguiente comando que nos muestra los UUID asignados a cada partición:
@> ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 2009-11-10 20:16 10f3ea77-9c79-4a86-ab3c-3b33a3d90bcb -> ../../sda1
lrwxrwxrwx 1 root root 10 2009-11-10 20:16 253E3CA067DE1273 -> ../../sda3
lrwxrwxrwx 1 root root 10 2009-11-10 20:16 8EC1-2066 -> ../../sda5
lrwxrwxrwx 1 root root 10 2009-11-10 20:16 986670b7-03bb-4c62-9012-76a614ff26ff -> ../../sda6
lrwxrwxrwx 1 root root 10 2009-11-10 20:16 ea4a082a-302e-4743-bea6-edb9947f57ab -> ../../sda2

Aquí edito la misma entrada que antes para Backtrack4 en el /dev/sda6 (Esto sería el tipo de entrada que veríais si se generase automáticamente con el GRUB)

title backtrack4 8.10, kernel 2.6.29.4
uuid 986670b7-03bb-4c62-9012-76a614ff26ff
kernel /boot/vmlinuz-2.6.29.4 root=UUID=986670b7-03bb-4c62-9012-76a614ff26ff ro quiet splash
initrd /boot/initrd.img-2.6.29.4
quiet

quiet --> se puede omitir, creo que lo que hace es mostrar la pantalla de carga de ubuntu en lugar de la salida dmesg.

Paso de parámetros en la consola del JDeveloper

Si algún día desarrolláis alguna aplicación que requiera el paso de parámetros por consola en JDeveloper (version 10) necesitaréis activar una de sus opciones.

Para activar el paso de parámetros váis a:
Tools --> Project Properties --> Run/Debug
Ahí pulsais sobre Edit...
Seleccionáis Tool Settings y marcáis "Allow Program Input"

Ahora cuando ejecutéis en la consola aparecerá abajo del todo una línea que pone "input" ahí podéis introducir los parámetros.

Esto es útil por si desarrolláis una aplicación con un método main que por ejemplo imprime "Contintue (S/N)?:" y pide que pulses una tecla para continuar.


Pasar parámetros al main a través del args:
En este caso: Tools --> Project Properties --> Run/Debug De nuevo pulsais sobre Edit... y en launch Settings en la entrada Program arguments escribís los parámetros del args que queréis pasar separados por un espacio como si se tratase de la línea de comandos.

Bienvenidos a java para mochuelos

La idea de este blog es ir comentando los diversos truquillos, ya sean de java, html, javascript, OAS, etc... que van surgiendo en el día a día de los WebMaster que formamos este equipo.
Por supuesto críticas y comentarios son siempre bienvenidos.