Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Error codificación caracteres en web (https://www.clubdelphi.com/foros/showthread.php?t=37019)

papulo 31-10-2006 11:51:20

Error codificación caracteres en web
 
Tengo esto:

Código PHP:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <link rel="STYLESHEET" type="text/css" href="FactoryDataWeb800.css">
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>Inicio</title>
</head>
<body>

<?php
    
if (($language_id==1)or($language_id==2))
    {
    
$language_id=$language_id;
    }
    else
    {
      switch(  
substr$_SERVER['HTTP_ACCEPT_LANGUAGE'], 0) )
    {
      case 
"es"$language_id=1; break;
      case 
"pt"$language_id=1; break;
      case 
"en"$language_id=2; break;
      default: 
$language_id=2;
    }
    }
?>
<table CLASS="c1" border="0" cellpadding="0" cellspacing="0">
  <tbody>
    <tr>
      <td style="background-image: url(Imagenes2.php)" CLASS="c2" colspan="3" >
      <table CLASS="c3" border="0" cellpadding="0" cellspacing="0">
        <tbody>
          <tr>
            <td CLASS="c4">
            <?php echo "<a href=\"index.php?language_id=$language_id\">"?>
            <img <?php echo "src=\"logo_factorydata.php?language_id=$language_id\""?> alt="" CLASS="c5" hspace="3"></a>
            </td>
            <td CLASS="c6">&nbsp;</td>
            <td CLASS="c7">
                <table CLASS="c8" border="0" cellpadding="0" cellspacing="0">
                    <tbody>
                     <tr>
                         <td CLASS="c9">
                            <?php echo "<a href=\"index.php?language_id=2\">"?>
                  <img CLASS="c10" alt="" src="imagenes/ingles.jpg"></a></td>
                  <td CLASS="c11">
                  <?php echo "<a href=\"index.php?language_id=1\">"?>
                   <img CLASS="c12" alt="" src="imagenes/castellano.jpg"></a></td>
                </tr>
              </tbody>
            </table>
            </td>
          </tr>
        </tbody>
      </table>
      </td>
    </tr>
    <tr>
      <td CLASS="c13">
      <table CLASS="c14" border="0" cellpadding="0" cellspacing="0">
        <tbody CLASS="c15">
          <tr>
            <td CLASS="c16">
            <?php
            
include("libreria_web.php");
            
$query="SELECT M.LEVEL_ID, M.CONTENT_ID, S.TEXT
            FROM MENUS M, TEXT_TRANSLATIONS T, TEXT_STRINGS S
            WHERE M.TRANS_ID=T.TRANS_ID
            AND T.TEXT_ID=S.TEXT_ID
            AND M.ACTIVATED='Y'
            AND T.LANGUAGE_ID=
$language_id
            ORDER BY ITEM_ORDER"
;
            
$consulta=consulta_bd($query);
            
$OldLevel_Id=0;
            while (
$fila ibase_fetch_object ($consulta))
            {
              if (
$fila->LEVEL_ID<0)
            {
              if (
$OldLevel_Id>0)
            {
              echo 
cerrar_celda(); echo insertar_titulo($fila); ++$OldLevel_Id; }
            else
            { echo 
insertar_titulo($fila); ++$OldLevel_Id; }
            }
            else
            { echo 
insertar_apartado($fila,$language_id); }
            }
           
?>
            </td>
          </tr>
        </tbody>
      </table>
      </td>
      <td CLASS="c17">
      <table CLASS="c18" border="0" cellpadding="0" cellspacing="0">
        <tbody>
          <tr>
            <td CLASS="c19">
            <?php echo "<img src=\"Index_main_image.php?language_id=$language_id\" alt=\"\" CLASS=\"c20\">"?>
           </td>
          </tr>
          <tr>
            <td CLASS="c21">
            <table CLASS="c22" border="0" cellpadding="0" cellspacing="0">
              <tbody CLASS="c23">
                <?php $query="SELECT S.TEXT AS TITULO, S2.TEXT AS TEXTO, M.CONTENT_ID
                FROM MAIN_CONTENTS M, TEXT_TRANSLATIONS T, TEXT_TRANSLATIONS T2, TEXT_STRINGS S, TEXT_STRINGS S2
                WHERE M.TITLE_TRANS_ID=T.TRANS_ID
                AND M.TRANS_ID=T2.TRANS_ID
                AND T.TEXT_ID=S.TEXT_ID
                AND T2.TEXT_ID=S2.TEXT_ID
                AND T.LANGUAGE_ID=
$language_id
                AND T2.LANGUAGE_ID=
$language_id
                ORDER BY M.MAIN_CONTENT_ID DESC"
;
                
$consulta=consulta_bd($query);
                while (
$fila ibase_fetch_object ($consulta))
                {
                  echo 
insert_main_content($fila,$language_id);
                }
                
?>
              </tbody>
            </table>
            </td>
          </tr>
        </tbody>
      </table>
      </td>
      <td CLASS="c24">
      <table CLASS="c25" border="0" cellpadding="0" cellspacing="0">
        <tbody>
          <tr>
            <td CLASS="c26"> <img CLASS="c27" alt="" src="imagenes/fabricantes/Lbosch.jpg" hspace="7"> </td>
          </tr>
          <tr>
            <td class="c26"> <img CLASS="c27" alt="" src="imagenes/fabricantes/Lvaleo.jpg" hspace="7"> </td>
          </tr>
          <tr>
            <td class="c26"> <img CLASS="c27" alt="" src="imagenes/fabricantes/Ldelcoremy.jpg" hspace="7">
            </td>
          </tr>
          <tr>
            <td class="c26"> <img CLASS="c27" alt="" src="imagenes/fabricantes/Lnippondenso.jpg" hspace="7">
            </td>
          </tr>
        </tbody>
      </table>
     </td>
    </tr>
  </tbody>
</table>
<div CLASS="c28">
<span CLASS="c29">FACTORY DATA&nbsp;</span>
<font CLASS="c30" face="Arial" size="1">&copy; 2006 Todos los derechos reservados</font>
<p>
 <a href="http://validator.w3.org/check?uri=referer">
  <img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" height="27" width="84">
      <?php resolution?>
 </a>
</p>
</div>

</body>
</html>

Y me sale esto:

[img=http://img441.imageshack.us/img441/695/webcodificacionzw0.th.png].

Perdido estoy, pero espero que en el mail esté toda la info necesaria.

D-MO 31-10-2006 16:23:42

intenta haciendo uso de la función "htmlentities()" cuando haces que se muestre el texto.
Si haces:
Código PHP:

echo htmlentities('capítulo'

generará el código html:
Código:

cap&iacute;tulo
Lo que se mostratá como:
Código:

capítulo
Saludos.

dec 31-10-2006 16:33:14

Hola,

Yo trataría de utilizar la codificación de caracteres UTF-8, que, precisamente, hará innecesarias las entidades HTML para ciertos caracteres, a lo menos en general. Prueba guardando el Script PHP (el archivo que lo contiene) con la codificación de caracteres UTF-8.

A continuación actualiza en consecuencia la meta-etiqueta:

Código:

<meta content="text/html; charset=utf-8" http-equiv="content-type">
Si todavía encuentras problemas... puedes añadir la siguiente línea en la cabecera HTTP, esto es, antes de enviar ninguna salida:

Código PHP:

header("Content-Type: text/html; charset=utf-8"); 

Y, si quieres evitarte la anterior cabecera, podrías utilizar la siguiente instrucción dentro de un archivo ".htaccess" en el directorio raíz de tu aplicación (ignoro si esto puede establecerse en el archivo de configuración de Apache, supongo que sí, que podrá hacerse):

Código:

AddDefaultCharset utf-8

papulo 31-10-2006 18:57:37

Con las dos primeras opciones me pasa lo mismo.

Código PHP:

<?php header("Content-Type: text/html; charset=utf-8");   ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <link rel="STYLESHEET" type="text/css" href="FactoryDataWeb800.css">
    <meta content="text/html; charset=utf-8" http-equiv="content-type">
    <title>Inicio</title>
</head>
<body>
...

Me cachis, sigue haciendo lo mismo.

A lo mejor es el archivo de configuración de apache.

dec 31-10-2006 21:17:35

Hola,

O que el archivo que contiene el Script PHP no lo guardas con la codificación oportuna.

¿Te aseguraste de que el archivo tiene la codificación de caracteres UTF-8?

papulo 02-11-2006 09:10:04

Cita:

Empezado por dec
Hola,

O que el archivo que contiene el Script PHP no lo guardas con la codificación oportuna.

¿Te aseguraste de que el archivo tiene la codificación de caracteres UTF-8?

¿Mande? ¿Te refieres al archivo "librería_web.php"?

Por si las moscas aquí va el contenido:

Código PHP:

<?
//******************************************************************************
// Funcion de conexion a al BD y consulta de $query
//******************************************************************************
function consulta_bd($query)
{
$connection ibase_pconnect ('192.168.100.100:c:/wamp/www/web3/DB.FDB''papichulo''masterkey');
$sql $query//Insertamos la consulta que queremos realizar
$consulta ibase_query($connection$sql);
return 
$consulta;
}

//******************************************************************************
//Funciones de insercion en el menus lateral
//******************************************************************************
function insertar_titulo($fila)
{
$insertar_titulo="<tr CLASS=\"c31\"><td CLASS=\"c32\"><span CLASS=\"c33\"><br>&nbsp;$fila->TEXT</span>";
return 
$insertar_titulo;
}

function 
insertar_apartado($fila,$language_id)
{
$insertar_apartado="<br><a href=\"content.php?content=$fila->CONTENT_ID&amp;language_id=$language_id\"><span CLASS=\"c34\">&nbsp;&nbsp;&nbsp;$fila->TEXT</span></a>";
return 
$insertar_apartado;
}

function 
cerrar_celda()
{
$cerrar_celda="<br><br></td></tr>";
return 
$cerrar_celda;
}
//******************************************************************************
//Funcion de insercion del contenido en la pagina principal
//******************************************************************************
function insert_main_content($fila,$language_id)
{
$insertar_main_content="<tr>
<td CLASS=\"c44\">
<span CLASS=\"c35\">
<a href=\"content.php?content=
$fila->CONTENT_ID&amp;language_id=$language_id\">
<b><br>
$fila->TITULO</b></a>
</span>
<br>
$fila->TEXTO</td>
<td CLASS=\"c36\"></td>
</tr>"
;
return 
$insertar_main_content;
}
//******************************************************************************
//Plantillas para la insercion de los datos/imagenes en content.php
//******************************************************************************
function content_PRODUCT($fila,$language_id)
{
$tabla="<td CLASS=\"c37\">
<div CLASS=\"c38\">
$fila->TITULO</div>
      <br>
$fila->TEXTO<br>
        <div CLASS=\"c39\"><img src=\"content_product_image.php?language_id=
$language_id\"  ALT=\"\" vspace=\"2\" CLASS=\"c48\"></div>";
        
/*<TAG> de las imagenes en FIXED_RESOURCES: "content_product_images"*/
return $tabla;
}

function 
content_CONTACT($fila,$language_id)
{
$tabla="<td CLASS=\"c37\">
           <div CLASS=\"c38a\">
$fila->TITULO</div><br>$fila->TEXTO</td>
        <td width=200px align=\"right\">
           <img src=\"content_contact_image.php?language_id=
$language_id\" >
        </td>"
;
        
/*<TAG> de las imagenes en FIXED_RESOURCES: "content_contact_images"*/
return $tabla;
}


function 
content_no_image($fila,$language_id)
{
$tabla="<td CLASS=\"c40\">
        <span CLASS=\"c41\">
$fila->TITULO</span>
        <br>
        <div CLASS=\"c42\">
$fila->TEXTO</div>";
return 
$tabla;
}
?>

Siento haber tardado tanto en responder, pero como ayer no trabajamos, estuve todo el día fuera de casa.

PD:Thanks for la help, Dec and cia.

PPD: Mientras tanto aprovecho para ir buscando información sobre .htaccess

papulo 07-11-2006 09:42:55

Aaarribaaaa...

Que no decaiga el tema, que sigue mas parao que el barco de chanquete.

Need backup.

Saludos.

PD:Vaya forma de gastar bits mas inútil.

papulo 15-11-2006 13:48:43

¿Es posible que tenga que ver con el archivo CSS? Es que llevo varios días comprobando posibles soluciones, y he comprobado que apache codifica de fábula los caracteres "raros" (acentos, eñes y demás).

¿Podría estár ahí el problema?

Ñuño Martínez 15-11-2006 14:00:25

Lo dudo, salvo si en la propiedad "font-family" utilices una fuente que no esté instalada en el equipo donde se está ejecutando el navegador.

papulo 17-11-2006 10:58:03

RESUELTO!!!

Cambié
Código:

<meta content="text/html; charset=UTF-8" http-equiv="content-type">
Por
Código:

<meta content="text/html" http-equiv="content-type">
Y ya está, dejo al archivo de configuración de Apache que codifique en UTF-8.

Con
Código:

<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
Va perfectamente.

roman 17-11-2006 14:55:54

Hola, disculpa pero no entendí cuál fue la solución, ¿dejar todo a Apache?, ¿dejar el meta sin el charset?, ¿dejar el meta pero con charset=iso-8859-1? ¿todo al mismo tiempo?

// Saludos

papulo 17-11-2006 16:11:25

Quite el "Header" en php que indicaba la codificación UTF-8.
En la configuración del Apache, force la codificación a UTF-8.
En la etiqueta META he eliminado la referencia al charset.

Y ¡voila!, todo bien.


La franja horaria es GMT +2. Ahora son las 06:47:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi