西班牙字符无法正确显示

时间:2013-02-01 15:26:32

标签: php mysql date special-characters strftime

我得到了一个可爱的 盒子,应该显示西班牙语字符。 (即:ñ,á等)。我已经确定我的meta http-equiv设置为utf-8:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我还确保页面标题也设置为utf-8:

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

到目前为止,这是我的代码的开始阶段:

<?php
    setlocale(LC_ALL, 'es_MX');
    $datetime = strtotime($event['datetime']);
    $date = date("M j, Y", $datetime);
    $day = strftime("%A", $datetime);
    $time = date("g:i", $datetime);
?>
    <a href="/<?= $event['request'] ?>.html"><?= $day ?> <?= $time ?></a> 

上面的代码在where语句中。我已经读过在数据库中切换排序也可能是一个因素,但我已经将它设置为UTF-8 General ci。另外,该列中唯一的东西是DateTime,无论如何都是数字,无论如何都无法进行整理。

结果:s bado8:00

任何帮助都会一如既往地受到高度赞赏。

7 个答案:

答案 0 :(得分:6)

PHP / MySQL / UTF-8中需要考虑的事项

  • 数据库表和文本列应设置为UTF-8
  • HTML页面Content-Type应设置为UTF-8

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  • PHP应发送一个标头,通知浏览器期望UTF-8

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

  • PHP-MySQL连接应设置为UTF-8

    mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn);

    mysqli_query("SET CHARACTER_SET_RESULTS='utf8'",$conn);

    mysqli_query("SET CHARACTER_SET_CONNECTION='utf8'",$conn);

  • PHP ini有default_charset设置,应该是utf-8 如果您无权访问它,请使用ini_set('default_charset', 'utf-8');

答案 1 :(得分:5)

我已经遇到这个问题多年了,我找不到任何逻辑,我已经尝试了上述所有解决方案。

一种解决方案是为所有文本制作html代码。 这是我在其他所有方法都失败时使用的功能。

function span_accent($wordz)
{

$wordz = str_replace( "Á","&Aacute;",$wordz);
$wordz = str_replace( "É","&Eacute;",$wordz);
$wordz = str_replace( "Í","&Iacute;",$wordz);
$wordz = str_replace( "Ó","&Oacute;",$wordz);
$wordz = str_replace( "Ú","&Uacute;",$wordz);
$wordz = str_replace( "Ñ","&Ntilde;",$wordz);
$wordz = str_replace( "Ü","&Uuml;",$wordz);

$wordz = str_replace( "á","&aacute;",$wordz);
$wordz = str_replace( "é","&eacute;",$wordz);
$wordz = str_replace( "í","&iacute;",$wordz);
$wordz = str_replace( "ó","&oacute;",$wordz);
$wordz = str_replace( "ú","&uacute;",$wordz);
$wordz = str_replace( "ñ","&ntilde;",$wordz);
$wordz = str_replace( "ü","&uuml;",$wordz);

$wordz = str_replace( "¿","&iquest;",$wordz);
$wordz = str_replace( "¡","&iexcl;",$wordz);
$wordz = str_replace( "€","&euro;",$wordz);
$wordz = str_replace( "«","&laquo;",$wordz);
$wordz = str_replace( "»","&raquo;",$wordz);
$wordz = str_replace( "‹","&lsaquo;",$wordz);
$wordz = str_replace( "›","&rsaquo;",$wordz);
return $wordz;
}

答案 2 :(得分:3)

请检查您的文件ENCODING。它必须是没有BOM的UTF-8或UTF-8。

更改文件编码。使用Notepad ++(您也可以使用其他编辑器来更改文件编码)。在菜单栏中&gt;选择ENCODING&gt;选择任何没有BOM的UTF-8或UTF-8。

请参阅链接了解没有BOM的UTF-8和UTF-8的区别。 What's different between UTF-8 and UTF-8 without BOM?

希望它可以提供帮助。 :)

答案 3 :(得分:1)

有类似的问题,我在这里找到了答案。 Not Displaying Spanish Characters

分辨率是从UTF-8更改为Windows-1252。

(HTML) <meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
(PHP) ini_set('default_charset', 'windows-1252');

我的问题是从CSV文件读取西班牙语字符。当我在Excel中打开文件时,字符看起来很好。在我的编辑器中,无论预期字符是什么,都显示了奇数字符。此更改似乎可以满足我的要求。

答案 4 :(得分:0)

重要的是检查您的代码是否也编成UTF-8(您可以在许多文本和代码编辑器中看到此属性)。

因为只有一个符号(黑色方块),可能是您使用的是ISO-8859-1或ISO-8859-15。

答案 5 :(得分:0)

你能看到数据库表中的内容是正确的,用例如phpmyadmin查看它。如果是,请确保您的php文件是utf8编码的,请查看您的ide /编辑器配置。

答案 6 :(得分:0)

使用 utf8mb4Windows-1252

ini_set('default_charset', 'utf8mb4');

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

然后使用标签,

<meta charset="utf8mb4">