projectestac / marsupial

Moodle implementation of the Marsupial protocol to let authenticated access to external contents. It's developed by the Ministry of Education of the Government of Catalonia
4 stars 11 forks source link

problemas de codificación en Marsupial #4

Closed miguelvillares closed 10 years ago

miguelvillares commented 10 years ago

En el módulo get_books_structure se están utilizando funciones incorrectas para la comprobación de longitud y cortado de cadenas utf-8.

Los datos que vienen como "titulo" en los webservice luego se usan como "nombre" y "descripción" en moodle, truncándolos a 200 y 1024 caracteres respectivamente. Antes de producirse el error en la actualización de los contenidos se corta una cadena de texto, justo donde existe un carácter especial, que se ve correctamente en la cadena completa. El problema es que la forma de cortar la cadena no la está cortando en UTF-8.

Para solventar este problema hemos reemplazado en el código las llamadas de la izquierda por las de la derecha:

    strlen(xxx) -> mb_strlen(xxx, "UTF-8")
    substr(xxx, i, j) -> mb_substr(xxx, i, j, "UTF-8")

Es decir, las llamadas del tipo strlen(xxx) las hemos reemplazado por llamadas del tipo mb_strlen(xxx, "UTF-8")

Y las llamadas del tipo substr(xxx, i, j) las hemos reemplazdo por llamadas del tipo mb_substr(xxx, i, j, "UTF-8")

Después de estos cambios, el proceso finaliza correctamente y se puede ver a la hora de seleccionar actividades que los caracteres se muestran correctamente.

Se debería modificar el módulo de marsupial del moodle para que tenga en cuenta las longitudes y cortes de cadenas en UTF-8. Ya que este problema pueden tenerlo con otras editoriales también. Ha surgido en Santillana porque justo una actividad tenía un caracter especial donde se hace el corte.

Un saludo

sarjona commented 10 years ago

Hace algunos meses ya se hicieron los cambios pertinentes para solucionar este problema en el módulo de Marsupial para Moodle 2. En lugar de utilizar la función mb_substr que propones, se sustituyeron las llamadas a la función PHP strlen() por la función estándard de Moodle textlib::strlen().

Estos cambios únicamente se aplicaron en la versión para Moodle 2 puesto que la versión para Moodle 1.9 ya no está soportada (y de momento sigue en GitHub por motivos históricos aunque está previsto eliminarla en breve).