-5

可能重复:
一直到 UTF-8

嗨,我最近在我的服务器上从 linux 切换到了 freebsb,现在我的数据库正在运行。

当我尝试回显包含 å、ä 或 ö(瑞典字母)的字符串时,它会变成一个问号。即:Söndag 成为 Söndag。回声“ä”;作品。$文件--mime test.php test.php:文本/纯文本;字符集=utf-8

测试.php

<?php
$a="å";
mysql_connect("localhost", "root", ":-)");
mysql_select_db("lidev");

$result=mysql_query("select * from DLG where dag='Onsdag'");
$row=mysql_fetch_array($result);

echo $row['dagens'];
echo "<br>";
echo mb_detect_encoding($row['dagens']);
?>

mb_detect_encoding() 输出“UTF-8” 我的 mysql 表在utf8_general_ci中。

我完全被困住了!怎么了?

干杯!

4

1 回答 1

2

似乎您并没有在任何地方使用 utf-8,因此您的数据在某些时候会变得混乱。根据您的具体操作,您必须更改/添加以下一项或多项(很可能是您忘记的SET CHARSET/ ):mysql_set_charset

  • 告诉 MySQL 使用 utf-8。为此,请将其添加到您的 my.cnf:

    collation_server = utf8_unicode_ci
    character_set_server = utf8
    
  • 在与 mysql 交互之前,发送这两个查询:

    SET NAMES 'utf8';
    CHARSET 'utf8';
    

    或者,或者,让 php 在打开连接后执行此操作:

    mysql_set_charset('utf8', $conn); // when using the mysql_-functions
    mysqli::set_charset('utf8') // when using mysqli
    
  • 将 UTF-8 设置为数据库的默认字符集

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
    
  • 对表格执行相同的操作:

    CREATE TABLE `my_table` (
      -- ...
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  • 假设客户端是浏览器,将您的内容作为 utf-8 和正确的标头提供:

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

    为了确保浏览器能够理解,添加一个元标记:

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    
  • 最后但同样重要的是,告诉浏览器使用 utf-8 提交表单

    <form accept-charset="utf-8" ...>
    
于 2012-06-20T13:38:36.513 回答