php - metatags - online meta tags wizard
Cómo configurar PHP de mejor manera para manejar un sitio web UTF-8 (6)
Actualización 2018 :::
Por favor, tenga en cuenta que estas entradas de php.ini son DEPRECATED;
;mbstring.internal_encoding = utf-8
;mbstring.http_input =
;mbstring.http_output = utf-8
Configuración de default_charset es suficiente.
default_charset = "UTF-8"
¿Qué extensiones recomendaría y cómo debería configurarse mejor php para crear un sitio web que utilice la codificación utf-8 para todo? p.ej...
- La salida de la página es utf-8
- Formularios de envío de datos codificados en utf-8.
- el procesamiento interno de datos de cadena (por ejemplo, cuando se habla con una base de datos) también están en utf-8.
Parece que php realmente no soporta bien los conjuntos de caracteres multibyte en este momento. Hasta ahora he descubierto que mbstring parece una extensión importante.
Vale la pena la molestia..?
En tu php.ini, establece
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
para que no tenga que pasar un parámetro de codificación a las funciones mb_ todas las veces.
Estaba enfrentando el mismo problema con UTF-8 characters
, Todo estaba funcionando en un servidor en vivo y en un servidor de prueba, pero en algún momento se está rompiendo en mi máquina de desarrollo. El comportamiento fue muy extraño, algunas veces los caracteres se codificaron correctamente, pero en la recarga aleatoria de la página se comenzó a romper con '' เห็นอเวิลด์! ''
Diamond Charters
'' เห็นอเวิลด์! ''
Diamond Charters
''?? เห็นอเวิลด์!???''
o el 85% de los datos se representaba correctamente ''เห็นอเวิลด์!? ''
pero el 15% restante mostraba caracteres no ''เห็นอเวิลด์!? ''
. Estaba buscando para solucionar el problema. Entonces, comencé con mi lista de verificación
1 - Comprueba si el encabezado de carácter añadido en HTML
2 - Verifique si los datos se guardaron correctamente en la tabla MySQL
3 - Compruebe si MySQL tiene la configuración de codificación adecuada para UTF-8
4 - Compruebe si Apache tiene la configuración para tratar con el conjunto de caracteres UTF-8
5 - Verifique si PHP simple puede repetir la salida "เห็น อ" igual que la entrada "เห็น อ เวิลด์"
6 - Compruebe si PHP está enviando la salida correcta de los encabezados
7 - Verifique si MySQL Query obtiene los mismos datos "เห็น อ เวิลด์"
8 - Verifique si "เห็น อ เวิลด์" tiene algunos caracteres html, trátelos adecuadamente
9 - Verifique si "เห็น อ เวิลด์" pasa a través de cualquier función de decodificación de codificación html
10- Compruebe si .htaccess está configurado para tratar con el conjunto de caracteres UTF-8
Revise toda la lista anterior para averiguar dónde algo ... rompe.
Dar una oportunidad (estoy usando Codeigniter):
=================================
:: PHP ini Settings::
=================================
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=6
=================================
:: .htaccess Settings::
=================================
DefaultLanguage en-US
AddDefaultCharset UTF-8
=================================
:: HTML Header Page::
=================================
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
=================================
:: PHP Codeigniter index.php ::
=================================
header(''Content-Type: text/html; charset=UTF-8'');
=================================
:: Codeigniter config.php ::
=================================
$config[''charset''] = ''UTF-8'';
=================================
:: Codeigniter database.php ::
=================================
$db[''default''][''char_set''] = ''utf8'';
$db[''default''][''dbcollat''] = ''utf8_general_ci'';
=================================
:: Codeigniter helper function (optional)
=================================
if(!function_exists(''safe_utf_string'')){
function safe_utf_string($utf8string= ''''){
$utf8string = htmlspecialchars($utf8string, ENT_QUOTES, ''UTF-8'');
return mb_convert_encoding($utf8string, ''UTF-8'');
}
}
y finalmente no olvides decir gracias! :) a responder
Los supuestos problemas de PHP con contenido de Unicode se han exagerado un poco. He estado haciendo sitios web multilingües desde 1998 y nunca supe que podría haber un problema hasta que lo leí en algún lugar, muchos años y sitios web más tarde.
Esto funciona bien para mí:
Configuración de Apache (en httpd.conf o .htaccess)
AddDefaultCharset utf-8
PHP (en php.ini)
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=6
MySQL
CREATE
tu base de datos con una intercalación de utf8_*
, deja que las tablas hereden la intercalación de la base de datos y comienza cada conexión con "SET NAMES utf8"
HTML (en el elemento HEAD)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Si mbstring no es parte de su paquete PHP, entonces definitivamente lo recomendaría, incluso querrá usarlo para calcular longitudes de cadena (mb_strlen ($ string_var, ''utf8'')) para la entrada de formularios ... De lo contrario, no necesitará nada, excepto HTML válido y correcto, un http-server-config correcto (por lo que el servidor entregará páginas sin utf-8) y un editor de texto con utf-8-support (por ejemplo, Notepad ++).
php hace frente bien!
Debe establecer el parámetro "default_charset" de php.ini en ''utf-8''.
Asegúrese de que: -
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8"
/>
está en la parte superior de cada página que sirve.
Hay algunas áreas problemáticas:
Bases de datos: asegúrese de que estén configuradas para usar utf-8 de forma predeterminada o que entren en un mundo de dolor.
IDE / Editores: muchos editores no admiten bien utf-8. Normalmente uso vim que no lo hace, pero nunca ha sido un gran problema.
Documentos: acabo de pasar toda una tarde haciendo que php lea caracteres tailandeses de una hoja de cálculo. Finalmente tuve éxito, pero todavía no estoy seguro de lo que hice bien.