SQL Server codificación

867 views
Skip to first unread message

jope18...@gmail.com

unread,
Mar 28, 2010, 8:03:18 AM3/28/10
to Grupo de programadores PHP de Barcelona
Hola,

A ver si me tiráis un flotador, que llevo ya varios días
ahogándome.. :)

Estoy en un servidor windows, que tiene instalado php con FastCGI.
Bien, desde php tengo que sacar los datos de una base de datos SQL
SERVER, a la cual accedo mediante odbc, no he conseguido hacerlo de
otra manera.

¿El problema? Los malditos caracteres al sacar los datos...

He probado con:

header('Content-Type: text/html; charset=UTF-8');

Y con utf8_encode, pero aún así algunos tipos de datos me siguen
volcando contenido con caracteres extraños..

Algún consejo? Alguna ayudita?

Muchas gracias de antemano.

Eduard Llach

unread,
Mar 28, 2010, 10:03:00 AM3/28/10
to phpbar...@googlegroups.com
Prueba pasarlo por un HTML-Entities.

Aunque creo que lo mejor es que mires qué configuración de carácteres está usando el SQL Server.

Edu


--
Has recibido este mensaje porque estás suscrito al grupo "Grupo de programadores PHP de Barcelona" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a phpbar...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a phpbarcelona...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/phpbarcelona?hl=es.




--
Eduard Llach

jope18...@gmail.com

unread,
Mar 29, 2010, 4:29:36 AM3/29/10
to Grupo de programadores PHP de Barcelona
Gracias Eduard. He probado y no me sirve tampoco.

Más datos, la base de datos tiene un "Collation Name:
Modern_Spanish_CI_AS".

Lo campos que quiero mostra contienen contenido html, y en base de
datos estan almacenados cómo "ntext".

Alguna idea más? Alguna ayuda más?

On 28 mar, 16:03, Eduard Llach <eduardll...@gmail.com> wrote:
> Prueba pasarlo por un HTML-Entities.
>
> Aunque creo que lo mejor es que mires qué configuración de carácteres está
> usando el SQL Server.
>
> Edu
>

> 2010/3/28 jope18jos...@gmail.com <jope18jos...@gmail.com>


>
>
>
>
>
>
>
> > Hola,
>
> > A ver si me tiráis un flotador, que llevo ya varios días
> > ahogándome.. :)
>
> > Estoy en un servidor windows, que tiene instalado php con FastCGI.
> > Bien, desde php tengo que sacar los datos de una base de datos SQL
> > SERVER, a la cual accedo mediante odbc, no he conseguido hacerlo de
> > otra manera.
>
> > ¿El problema? Los malditos caracteres al sacar los datos...
>
> > He probado con:
>
> > header('Content-Type: text/html; charset=UTF-8');
>
> > Y con utf8_encode, pero aún así algunos tipos de datos me siguen
> > volcando contenido con caracteres extraños..
>
> > Algún consejo? Alguna ayudita?
>
> > Muchas gracias de antemano.
>
> > --
> > Has recibido este mensaje porque estás suscrito al grupo "Grupo de
> > programadores PHP de Barcelona" de Grupos de Google.
> > Para publicar una entrada en este grupo, envía un correo electrónico a
> > phpbar...@googlegroups.com.
> > Para anular tu suscripción a este grupo, envía un correo electrónico a

> > phpbarcelona...@googlegroups.com<phpbarcelona%2Bunsu...@googlegroups.com>

Eduard Llach

unread,
Mar 29, 2010, 4:42:29 AM3/29/10
to phpbar...@googlegroups.com
De la documentación del SQL Server:

http://msdn.microsoft.com/es-es/library/ms187993.aspx

Tipos de datos de longitud fija y variable para almacenar valores de gran tamaño con datos de caracteres y binarios Unicode y no Unicode. Los datos Unicode utilizan el juego de caracteres UNICODE UCS-2.

El UCS-2 es una "versión" antigua del UTF-16, y tiene alguna que otra limitación.

Ambos están soportados por el MBString

http://www.php.net/manual/en/mbstring.supported-encodings.php
http://www.moddular.org/log/utf16-to-utf8

Edu




--
Eduard Llach

jope18...@gmail.com

unread,
Mar 29, 2010, 6:53:31 AM3/29/10
to Grupo de programadores PHP de Barcelona
Muchas gracias, ya creo que estoy cerca, pero sigo atascado en algo.

Os cuento, paso los caracteres a UTF-8 con:

if( mb_check_encoding($valor, 'UTF-8') != 1 ){
$valor = mb_convert_encoding($valor, 'UTF-8');
}

Hasta aquí me lo hace perfecto, salvo para cadenas de textos muy
largas, de mayor de 4 mil y pico caracteres. ¿Sabeís porqué puede ser?

Una vez más, gracias


On 29 mar, 10:42, Eduard Llach <eduardll...@gmail.com> wrote:
> De la documentación del SQL Server:
>
> http://msdn.microsoft.com/es-es/library/ms187993.aspx
>
> Tipos de datos de longitud fija y variable para almacenar valores de gran
> tamaño con datos de caracteres y binarios Unicode y no Unicode. Los datos
> Unicode utilizan el juego de caracteres UNICODE UCS-2.
>
> El UCS-2 es una "versión" antigua del UTF-16, y tiene alguna que otra
> limitación.
>
> Ambos están soportados por el MBString
>
> http://www.php.net/manual/en/mbstring.supported-encodings.phphttp://www.moddular.org/log/utf16-to-utf8
>
> Edu
>

> 2010/3/29 jope18jos...@gmail.com <jope18jos...@gmail.com>

> > <phpbarcelona%2Bunsu...@googlegroups.com<phpbarcelona%252Buns...@googlegroups.com>

Eduard Llach

unread,
Mar 29, 2010, 6:59:13 AM3/29/10
to phpbar...@googlegroups.com
Lo primero que veo es que te falta un parámetro: el "from_encoding": s specified by character code names before conversion. It is either an array , or a comma separated enumerated list. If from_encoding is not specified, the internal encoding will be used. "auto" may be used, which expands to "ASCII,JIS,UTF-8,EUC-JP,SJIS".

Es decir, si no lo especificas, no parece que coja bien el tuyo.






--
Eduard Llach

jope18...@gmail.com

unread,
Mar 29, 2010, 7:58:30 AM3/29/10
to Grupo de programadores PHP de Barcelona
Hola Eduard,

Gracias de nuevo. Lo he corregido, pero sigo con el mismo problema.

En las cadenas de más de 4 mil y pico caracteres, la codificación se
realiza en esos primeros 4 mil y pico caracteres, pero después no se
codifica el resto de la cadena, por lo no tengo ni idea cómo
arreglarlo..

Puede ser tema de capacidad? Alguna solución, o alternativa?

Saludos y gracias!


On 29 mar, 12:59, Eduard Llach <eduardll...@gmail.com> wrote:
> Lo primero que veo es que te falta un parámetro: el "from_encoding": s
> specified by character code names before conversion. It is either an

> array<http://www.php.net/manual/en/language.types.array.php>, or a


> comma separated enumerated list. If

> *from_encoding* is not specified, the internal encoding will be used. "*auto
> *" may be used, which expands to *"ASCII,JIS,UTF-8,EUC-JP,SJIS"*.


>
> Es decir, si no lo especificas, no parece que coja bien el tuyo.
>

> 2010/3/29 jope18jos...@gmail.com <jope18jos...@gmail.com>


>
>
>
> > Muchas gracias, ya creo que estoy cerca, pero sigo atascado en algo.
>
> > Os cuento, paso los caracteres a UTF-8 con:
>
> > if(  mb_check_encoding($valor, 'UTF-8') != 1  ){
> >    $valor = mb_convert_encoding($valor, 'UTF-8');
> > }
>
> > Hasta aquí me lo hace perfecto, salvo para cadenas de textos muy
> > largas, de mayor de 4 mil y pico caracteres. ¿Sabeís porqué puede ser?
>
> > Una vez más, gracias
>
> > On 29 mar, 10:42, Eduard Llach <eduardll...@gmail.com> wrote:
> > > De la documentación del SQL Server:
>
> > >http://msdn.microsoft.com/es-es/library/ms187993.aspx
>
> > > Tipos de datos de longitud fija y variable para almacenar valores de gran
> > > tamaño con datos de caracteres y binarios Unicode y no Unicode. Los datos
> > > Unicode utilizan el juego de caracteres UNICODE UCS-2.
>
> > > El UCS-2 es una "versión" antigua del UTF-16, y tiene alguna que otra
> > > limitación.
>
> > > Ambos están soportados por el MBString
>

> >http://www.php.net/manual/en/mbstring.supported-encodings.phphttp://w...

> > > > <phpbarcelona%2Bunsu...@googlegroups.com<phpbarcelona%252Buns...@googlegroups.com>
> > <phpbarcelona%252Buns...@googlegroups.com<phpbarcelona%25252Bun...@googlegroups.com>

jope18...@gmail.com

unread,
Mar 29, 2010, 3:01:52 PM3/29/10
to Grupo de programadores PHP de Barcelona
Por las pruebas que he hecho, debe venir por el odbc y presupongo que
la capacidad de los campos que trae...

Finalmente, y aunque sea muy cutre, vuelco desde otra aplicación todo
el contenido a una bd mysql, y al sacarlo con mysql_query, ya me sale
todo perfecto...

Si alguien encuentra solución al problema, bienvenida sea, ya que la
intriga la llevo dentro todavía.

Saludos y gracias!


On 29 mar, 13:58, "jope18jos...@gmail.com" <jope18jos...@gmail.com>
wrote:

Eduard Llach

unread,
Mar 29, 2010, 3:07:43 PM3/29/10
to phpbar...@googlegroups.com
http://php.net/manual/en/function.odbc-result.php

El primer comentario

- Make sure to include "set textsize 2147483647 " in your query.
  Without it, MSSQL truncates large values to 4096 bytes by default.
  Other databases may have a similar small limit





--
Eduard Llach

Eduard Llach

unread,
Mar 29, 2010, 3:10:40 PM3/29/10
to phpbar...@googlegroups.com
Y he aquí lo definitivo

http://www.associatedcontent.com/article/9142/php_getting_text_to_display_from_odbc.html

To solve this problem you have to increase the size of the odbc.defaultlrl setting in the php.ini file. Located about half way down in the Module Settings section. You will see the chunk of code listed for ODBC. Change the odbc.defaultlrl = 4096 to a number great enough for need. I changed it to 60000 because I needed to work with documents that were approximately 4000 words in length. Here is the sample code from the php.ini file:

2010/3/29 Eduard Llach <eduar...@gmail.com>



--
Eduard Llach
Reply all
Reply to author
Forward
0 new messages