关于php:正确显示西班牙语字符

Spanish Characters not Displaying Correctly

我得到了可爱的?应显示西班牙语字符的框。(?)、阿等)。我已经确保我的meta-http-equiv设置为utf-8:

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

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

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

以下是迄今为止我的代码的开始阶段:

1
2
3
4
5
6
7
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);
?>
    .html"><?= $day ?> <?= $time ?>

上面的代码在WHERE语句中。我已经读到在数据库中切换排序规则也是一个因素,但我已经将它设置为utf-8常规CI。另外,该列中唯一的内容就是日期时间,它是数字,无论如何都无法排序。

结果:S?八度八

一如既往地感谢您的帮助。


php/mysql/utf-8需要考虑的问题

  • 数据库表和文本列应设置为UTF-8
  • HTML页面内容类型应设置为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有默认的字符集设置,应该是utf-8如果您无法访问它,请使用ini_set('default_charset', 'utf-8');


我多年来一直在遭受这个问题,我找不到任何逻辑,我已经尝试了以上所有的解决方案。

一种解决方案是为所有文本生成HTML代码。这里有一个函数,我在其他所有函数都失败时使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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;
}


请检查您的文件编码。它必须是UTF-8或UTF-8格式,没有BOM。

更改文件编码。使用记事本+(您也可以使用其他编辑器更改文件编码)。在菜单栏>选择编码>选择任何不带BOM的UTF-8或UTF-8。

有关没有BOM的utf-8和utf-8的区别,请参见链接。没有BOM的utf-8和utf-8有什么不同?

希望能有所帮助。:)


有一个类似的问题,我在这里找到了答案。不显示西班牙语字符

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

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

我的问题是从csv文件中读取西班牙语字符。当我在Excel中打开文件时,字符看起来很好。在我的编辑器中,无论预期的字符是什么,都会显示奇数字符。这一变化似乎符合我的要求。


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


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

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