{"id":141,"date":"2014-08-20T13:39:08","date_gmt":"2014-08-20T11:39:08","guid":{"rendered":"http:\/\/luismaseda.com\/wp\/?p=141"},"modified":"2016-02-06T13:41:34","modified_gmt":"2016-02-06T11:41:34","slug":"pablo-viquez-blog-encoding-utf-8-iso-8859-1-y-php","status":"publish","type":"post","link":"https:\/\/luismaseda.com\/wp\/?p=141","title":{"rendered":"Pablo Viquez Blog \u00bb Encoding, UTF-8, ISO 8859-1 y PHP"},"content":{"rendered":"<p><a href=\"http:\/\/www.pabloviquez.com\/2008\/09\/encoding-utf-8-iso-8859-1-y-php\/\">Pablo Viquez Blog \u00bb Encoding, UTF-8, ISO 8859-1 y PHP<\/a>.<\/p>\n<h2>Encoding, UTF-8, ISO 8859-1 y PHP<\/h2>\n<p class=\"timestamp\"><strong>4 September, 2008 (17:01) | <a title=\"View all posts in PHP\" href=\"http:\/\/www.pabloviquez.com\/category\/php\/\" rel=\"category tag\">PHP<\/a>, <a title=\"View all posts in Web Development\" href=\"http:\/\/www.pabloviquez.com\/category\/web-development\/\" rel=\"category tag\">Web Development<\/a> | By: Pablo Viquez<\/strong><\/p>\n<div class=\"contenttext\">\n<p>Hace unos dias tuve un problema tratando de desplegar tildes en una aplicaci\u00f3n, el problema surgi\u00f3 cuando quise hacer que toda la aplicaci\u00f3n fuera UTF-8.<\/p>\n<p>Es decir, que la DB hablara UTF-8 y las paginas desplegaran UTF-8:<\/p>\n<pre><strong>&lt;META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text\/html; charset=UTF-8\"&gt;<\/strong><\/pre>\n<pre><\/pre>\n<p>Ahora, cuando hice el despliegue en la p\u00e1gina, en vez de ver caracteres con tildes o signos de puntuancion de un lenguaje espec\u00edfico, no se desplegaban sino que mostraban caracteres extra\u00f1os.<\/p>\n<p>Despues de buscar e investigar, mi conclusi\u00f3n fue la siguiente:<\/p>\n<p>Basicamente, los archivos de texto pueden tener diferentes \u00abencodings\u00bb y asi reaccionan las funciones.<\/p>\n<p>Por ejemplo, la funci\u00f3n utf8_decode, convierte los datos pasados por parametro de tipo multy-byte UTF-8 a un single-byte de tipo ISO-8859-1.<\/p>\n<p>Ahora la funcion utf8_encode funciona bien con un archivo guardado con encoding ANSI, PERO si aplicamos la misma funcion con archivo de tipo UTF-8, nos despliega caracteres extra\u00f1os en las tildes y \u00f1\u2019s. Esto porque la funcion espera un parametro de tipo ISO-8859-1 y le estamos pasando uno de tipo UTF-8.<\/p>\n<p>Anyway, \u00bfporque es importante? por lo siguiente:<\/p>\n<p>Si deseo escribir un archivo en espa\u00f1ol usando UTF-8, y guardo el archivo en ANSI, los caracteres se van a desplegar de una manera extra\u00f1a.<\/p>\n<p>Ahora bien, si guardo los archivos fisicamente usando UTF-8, al ser multi-byte el encoding del archivo, los caracteres en espa\u00f1ol se desplegar\u00e1n correctamente.<\/p>\n<p>A todo esto, una funcion que sirve mucho si desea hacer la conversion explicita es \u00ab<strong>iconv<\/strong>\u00bb<\/p>\n<p><strong>Funcion<\/strong>: iconv<\/p>\n<p><strong>Uso<\/strong>: string iconv (string in_charset, string out_charset, string str)<\/p>\n<p><strong>Prop\u00f3sito<\/strong>: Convierte un string al encoding solicitado<\/p>\n<p>Ejemplo:<\/p>\n<pre>&lt;?php echo iconv('ISO-8859-1', 'UTF-8', '\u00e1'); ?&gt;<\/pre>\n<p>En un archivo guardado fisicamente como ANSI, funciona bien, PERO en un archivo guardado como UTF-8 va a desplegar un caracter extra\u00f1o.<\/p>\n<p>Ahora hay que tener cuidado, ya que si hacemos esto:<\/p>\n<pre>&lt;?php echo iconv('UTF-8', 'ISO-8859-1', '\u00e1'); ?&gt;<\/pre>\n<pre><\/pre>\n<p>En un archivo ISO-8859-1, nos genera un error \u00abNotice\u00bb, porque esta esperando un string de tipo multi-byte, y le estamos pasando un string single-byte, debido al encoding del archivo PHP.<\/p>\n<p>Por \u00faltimo, solo para probar el concepto:<\/p>\n<p>En un archivo guardado como ANSI:<\/p>\n<pre>&lt;?php echo ord('\u00e1'); ?&gt;<\/pre>\n<p><strong>Retorna, 255 <\/strong><\/p>\n<p>En un archivo guardado como UTF-8:<\/p>\n<pre>&lt;?php echo ord('\u00e1'); ?&gt;<\/pre>\n<p><strong>Retorna, 195<\/strong><\/p>\n<p>Dentro del zip file hay 2 archivos PHP, los 2 con el mismo contenido, la diferencia es el Encoding que use para guardar los archivos.<\/p>\n<p><strong>Resumen y conclusi\u00f3n<\/strong><\/p>\n<p>Si se trabaja con p\u00e1ginas donde el charset va a ser \u00abISO 8859-1\u00bb<\/p>\n<pre>&lt;META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text\/html; charset=ISO-8859-1\"&gt;<\/pre>\n<p>Asegurese de guardar los archivos fisicos PHP o HTML con un formato compatible tipo ANSI.<\/p>\n<p>PERO si las paginas van a tener un charset distinto como UTF-8:<\/p>\n<pre>&lt;META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text\/html; charset=UTF-8\"&gt;<\/pre>\n<p>El archivo f\u00edsico debe ser guardado con el encoding UTF-8.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Pablo Viquez Blog \u00bb Encoding, UTF-8, ISO 8859-1 y PHP. Encoding, UTF-8, ISO 8859-1 y PHP 4 September, 2008 (17:01) | PHP, Web Development | By: Pablo Viquez Hace unos dias tuve un problema tratando de desplegar tildes en una &hellip; <a href=\"https:\/\/luismaseda.com\/wp\/?p=141\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-141","post","type-post","status-publish","format-standard","hentry","category-desarrollo-web"],"_links":{"self":[{"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=141"}],"version-history":[{"count":3,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/141\/revisions"}],"predecessor-version":[{"id":409,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/141\/revisions\/409"}],"wp:attachment":[{"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/luismaseda.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}