php mysql特殊字符

标签 php mysql html

我的 table 看起来像这样-

province_id int(11)                  
province_title char(200) utf8_general_ci 
parent int(8) int(2)

我直接从 phpMyadmin(不是从 php 页面)插入了很多数据。但是当我检索这些数据并在 php 页面中显示它们时,就会出现特殊字符问题。

喜欢-

Québec shows -  Qu�bec.

我的 html 标题看起来像 -

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我认为问题可能是在插入数据时发生的。我如何在 phpmyadmin 中转换这些数据?有帮助吗?

最佳答案

您似乎没有在所有地方 使用 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 提供:

    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" ...>
    

关于php mysql特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10721867/

相关文章:

php - 为什么即使 var_dump() 显示索引已定义,我仍会收到未定义索引错误?

mysql - 正确的mysql触发器语法以防止无限循环

php - 根据查询类型和表将流量路由到特定的 MySQL 连接

html - 更改 HTML 文本框布局

javascript - 页面加载时默认第一个选项卡处于事件状态

javascript - 使用 jQuery 动态替换 <tr> 及其包含的元素

php - 使用 PHP 处理 GET 参数中的 unicode 值

Phpunit 模拟私有(private)函数

javascript - 在 Laravel 中使用 javascript 创建控件

mysql - 在 INNER JOIN 中使用列别名