Problema con encoding al editar un enlace en el FCKEditor

08/04/2011       Sergio Raposo Vargas       OpenCms, Programación, Manuales y tutoriales

Recientemente había detectado un error con el editor de texto enriquecido de OpenCms (el FCKEditor que aparece en los xml content). El error era curioso, yo editaba un enlace con la herramienta de añadir un enlace, y ponía el destino del enlace, que podía ser un enlace externo o interno, un target, es decir, indicaba si el enlace se iba a abrir en una página nueva o sobre la misma que estabamos actualmente, y por último podía indicar el título del enlace. Este título es el que aparece cuando nos posicionamos encima del enlace y es muy útil para tareas de posicionamiento y tal.

En este último campo lo normal era explicar el destino del enlace, de forma que lo más normal es que tuvieramos que escribir un texto descriptivo con tíldes y ñ incluido.

Una vez creado el enlace, si lo queremos editar teníamos dos posibilidades, una de ellas era pulsando con el botón derecho y dandole a "editar vinculo" y la otra era seleccionando el enlace y volviendo a darle al botón donde creamos el enlace, en la barra de herramientas del editor. Si utilizabamos la primera opción no había problemas, pero si usabamos la segunda, en el campo título se perdía la codificación mostrándose mal tanto las tíldes como las ñ incluidas.

Para resolver este problema tan solo tenemos que ir a editar la jsp: /system/workplace/editors/dialogs/link.jsp. En la línea 75 teníamos:

var title= "<%= request.getParameter("title") %>";

Como vemos, se carga en una variable de javascript el valor del parámetro title recibido. Como el envío de este parámetro se está realizando por get, la codificación se recibe mal y se provoca el error. Para solucionarlo tan solo tenemos que forzar el encoding a dicha variable, para eso metemos la siguiente modificación:

<%
String tituloRecibido = request.getParameter("title");
tituloRecibido = new String(tituloRecibido.getBytes(),wp.getEncoding());
%>
var title= "<%= tituloRecibido %>";

De esta forma se fuerza el encoding y se soluciona el problema.

Espero que este parche os sea útil.