almacenar carácteres especiales con oracle

1,926 views
Skip to first unread message

Asiertxo

unread,
Jan 8, 2007, 10:05:22 AM1/8/07
to symfony-es
Muy buenas a todos

De nuevo recurro a vosotros en busca de ayuda.

Estoy utilizando symfony con una base de datos oracle. Mi problema
reside en que cuando quiero almacenar algún caracter como "ñ", "á",
etc. en lugar de almacenarme el caracter correcto me lo cambia por uno
o varios "?".

Muchísimas gracias de antemano

Un fuerte saludo y un feliz año a todos

Marc Torres

unread,
Jan 8, 2007, 11:24:51 AM1/8/07
to symfo...@googlegroups.com
No he trabajado mucho con oracle, pero suena a un problema en la
codificación de caràcteres. Deberías mirar que codificación tienes en
las tables de Oracle (probablemente UTF-8 o iso-8859-15) y usar la
misma en symfony. Te recomiendo usar la UTF-8 si puedes, es más nueva
y supongo que es el futuro ;-D

En MySQL se puede configurar el charset imagino que con oracle también sé podrá.

Saludos y suerte!

Marc.

2007/1/8, Asiertxo <vegau...@hotmail.com>:

Luciano Andrade

unread,
Jan 8, 2007, 1:26:59 PM1/8/07
to symfo...@googlegroups.com
Definitivamente es un problema de encoding (yo lo tuve en mysql), en
general significa que no estas mostrando el encoding correcto, el
encodign puede ser malinterpretado en casi cualquier lugar, en las
tablas de mysql, la coneccion (con mysql), PHP, apache y el
explorador. Ademas de usar UTF-8 como recomendo Marc, deberias usar en
todos lados el mismo. A otra cosa en general el mejor lugar para
arreglarlo es en apache con una directiva que ahora no recuerdo (salvo
que este mandando encavezados o tags metas en tus paginas)

josx

unread,
Jan 9, 2007, 8:49:52 AM1/9/07
to symfo...@googlegroups.com
El Lunes 08 Enero 2007 13:24, Marc Torres escribió:
> No he trabajado mucho con oracle, pero suena a un problema en la
> codificación de caràcteres. Deberías mirar que codificación tienes en
> las tables de Oracle (probablemente UTF-8 o iso-8859-15) y usar la
> misma en symfony. Te recomiendo usar la UTF-8 si puedes, es más nueva
> y supongo que es el futuro ;-D
>
> En MySQL se puede configurar el charset imagino que con oracle también sé
> podrá.
>
> Saludos y suerte!
>
> Marc.
>

Seguramente se puede configurar cualquier tabla para que soporte UTF8.
Tenes que tener en cuenta algunas cosas más:

Tablas en UTF8
Encoding de HTML UTF8 (symfony por defecto los trae)
Archivos en UTF8 (ej si haces insert fijos con caracteres especiales para
cargar una base por defecto)

Asiertxo

unread,
Jan 10, 2007, 11:11:12 AM1/10/07
to symfony-es
Hola,

Estoy trabajando con Apache 2.2, PHP 5 y sf_sandbox de symfony sobre
Windows XP. He conseguido solucionar el problema de los caracteres
extraños modificando el archivo de configuración de mi aplicación
"view.yml", de manera que las primeras lineas queden de la siguiente
forma:

default:
http_metas:
content-type: text/html; charset=ISO-8859-1

Hago un include de estos http_metas en las páginas de mi
aplicación symfony.

No obstante tengo esta misma aplicación corriendo sobre una
máquina con Apache 2.2 y PHP 5 pero sobre un sistema operativo Linux.
En esta segunda máquina el problema persiste. Los caracteres del tipo
"ñ", "à", etc. no los trata correctamente. Los cambia por
interrogaciones "?".

Seríais tan amables de orientarme o indicarme por donde puede estar
el problema?

Muchisimas gracias de antemano

Un saludo a todos

mppfiles

unread,
Jan 10, 2007, 11:26:22 AM1/10/07
to symfony-es
a mi en mysql me pasaba lo mismo, lo mas sencillo es implementar una
clase como filter que resuelve las conexiones de propel.
fijate en http://www.symfony-project.com/snippets/snippet/37, sirve
para mysql, pero es cuestion de reemplazar el sql por el equivalente en
oracle.

Sé que en symfony > 0.9.2136, se puede usar un nuevo parámetro:
'encoding', en el databases.yml.

Luciano Andrade

unread,
Jan 10, 2007, 11:26:55 AM1/10/07
to symfo...@googlegroups.com
Si es la misma aplicacion con todo lo mismo quizas no borraste el cache.

Luciano Andrade

unread,
Jan 10, 2007, 12:37:29 PM1/10/07
to symfo...@googlegroups.com
Habria que ver si es propel, si es la base de datos o si el problema
lo tenes al mostrarlo (en el html o en el navegador).
¿Como es el setup de las bases de datos?

Asiertxo

unread,
Jan 12, 2007, 7:04:42 AM1/12/07
to symfony-es
He generado como prueba un archivo independiente que conecte con la
base de datos y extraiga el contenido de la tabla que estoy utilizando.

$charset = 'WE8ISO8859P1';
$conn = OCILogon($passBD, $usuarioBD,
"//".$hostBD.":".$puertoBD."/".$nombreBD, $charset);

He incluido charset como parámetro de la conexión con la base de
datos y lo he colocado en las dos plataformas (windows y linux). En
ambas me salen los contenidos perfectamente. Con "ñ", " ' ", etc.

He intentado añadir el campo encoding en databases.yml y modificar
filters.yml pero tampoco he conseguido nada.

Luciano Andrade

unread,
Jan 12, 2007, 12:19:05 PM1/12/07
to symfo...@googlegroups.com
Entonces es posible que sea el apache. Fijate en el navegador con que
encoding estas viendo la pagina

Asiertxo

unread,
Jan 15, 2007, 4:49:18 AM1/15/07
to symfony-es
Cómo puedo modificar la configuración de apache en una máquina
linux?
Con añadir "AddDefaultCharset ISO-8859-15" al final del archivo
httpd.conf y reiniciar apache es suficiente?

Muchas gracias por vuestra ayuda

Asiertxo

unread,
Jan 15, 2007, 7:36:39 AM1/15/07
to symfony-es
He creado un .htaccess en el directorio raíz con el texto
"AddDefaultCharset ISO-8859-1" dentro.
He probado también poniéndolo a "on" pero aun así no he conseguido
nada.

He tenido problemas y ha sido imposible limpiar la caché de symfony.
El problema se podría solucionar con este paso?

Muchas gracias

Asiertxo

unread,
Jan 16, 2007, 5:39:42 AM1/16/07
to symfony-es
He limpiado la caché de symfony en el servidor linux, modificado los
archivos i18n.yml y settings.yml incluyendo

all:
default_culture: es

en el primero y poniendo:

all:
.settings:
i18n: on

en el segundo pero ni aun así.

Todo apunta a la necesidad de una modificación en la configuración de
apache alguien sabría qué debo modificar? y cómo? al servidor linux
solamente tengo acceso vía FTP por lo que he probado colocando
archivos .htaccess en el directorio raíz de php en este servidor pero
el problema persiste.

Muchas gracias

Luciano Andrade

unread,
Jan 16, 2007, 12:55:16 PM1/16/07
to symfo...@googlegroups.com
Suponiendo que estas usando los mismos datos (tanto en windows como en
linux), entonces tu problema esta en que symfony y/o apache no
aciertan el encoding, (NO tiene nada que ver con la i18n), otra cosa
que podrias provar es setear el encoding en lugar de usar
AddDefaultCharset en las vistas de symfony (view.yml de cada
aplicacion)
default:
http_metas:
content-type: text/plain; charset=ISO-8859-1

y probar con otros encodings, probablemente la forma mas facil de
hacerlo es probar con el explorador (si usas firefox Ver ,
Codificación de Caracteres, Mas, y elegis alguno de las listas)

Asiertxo

unread,
Jan 18, 2007, 11:39:29 AM1/18/07
to symfony-es
He conseguido solucionar el problema ! ! !

Al final he accedido a
sf_sandbox\lib\symfony\vendor\creole\drivers\OCI8Connection.php y he
añadido como parámetro a la conexión "WE8ISO8859P1" quedando de la
siguiente manera:

$conn = @$connect_function( $user, $pw, "//$hostspec/$db" ,
"WE8ISO8859P1");

y

$conn = @$connect_function( $user, $pw, $hostspec , "WE8ISO8859P1");

Marc Torres

unread,
Jan 19, 2007, 2:06:23 AM1/19/07
to symfo...@googlegroups.com
Buen trabajo! Seguro que a más de uno le sirve ;-D

2007/1/18, Asiertxo <vegau...@hotmail.com>:

Luciano Andrade

unread,
Jan 19, 2007, 1:03:08 PM1/19/07
to symfo...@googlegroups.com
Estuve mirando y esta opcion no esta en los drivers de creole, seria
bueno que lo reportes (creole.phpdb.org), aunque parece que creole no
soporta una opcion para poner el charser en general.

En realidad seria mejor si ajustas tu configuración de oracle para
mantener el codigo original (no recuerdo si podias) mira .
http://ar2.php.net/manual/en/ref.oci8.php#25444
http://ar2.php.net/manual/en/ref.oci8.php#40178

Reply all
Reply to author
Forward
0 new messages