0

1) 我tbl_Data在数据库中有一个表,其name列的文本比较方法 (?) 属性设置为utf8_polish_ci. 当我浏览tbl_DataphpMyAdmin 时,它就像一个魅力。

2)在我的html代码中,我有:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">

所以好像我正在为浏览器发送正确的编码头......

3)我的 PDO dsn 包含;charset=UTF-8,然后是 php 手册。

4)在我的php代码中,我使用:

foreach(parent::query('SELECT ID,PLName,LatinName from tbl_Data') as $row) {
    $result = $result."
        <tr>
            <td>".utf8_encode($row['PLName'])."</td>
        </tr>
    ";
}

有了这一切,我仍然得到“垃圾”(= ?)字符而不是正确的波兰字母,尽管其中一些显示良好(phpMyAdmin 显示正确)。我在这里缺少什么?请各位大侠指教!

我的 MySQL 引擎是InnoDB,网络服务器:nginx如果它是相关的,则使用 fpm...

4

5 回答 5

2

所以好像我正在为浏览器发送正确的编码头。

错误的。<meta>不是 HTTP 标头而是 HTML 标签,一种非标准的标签。因此,您的代码仍然缺少正确的标头。

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

我的 PDO dsn 包含 ;charset=UTF-8,来自 php 手册。

如果您的 PHP 版本低于 5.3.6,它也不会工作。改用SET NAMES utf8常规查询

于 2012-12-28T05:12:52.147 回答
1

utf8_encode()如果您的文本已经是 UTF-8 编码,则没有理由使用。

一个潜在的问题可能是您的 PHP 版本。;charset=UTF-8只有 PHP 版本 >= 5.3.6 支持您的 DSN 元素。在 5.3.6 之前,此元素被默默忽略(而不是发出警告)。文档中提供了更多信息和解决方法:http: //php.net/manual/en/ref.pdo-mysql.connection.php

于 2012-12-28T04:22:39.297 回答
1

字符集 UTF-8 很好(在您的 html 中):P

试试这个..(为此使用新的实验表来检查它,因为我不知道您的 PHP 脚本是否正在清理 $_POST 条目,或者根本没有做某事..)

  1. 创建列设置为utf8_bin(不是 utf_ci_polish)名为“polish_title”

  2. 在 PHP 将(文本输入、润色)数据传递给 mysql 之前,INSERT (or update)使用此(PHP 集成)功能隐藏那些

    $polish_input = htmlspecialchars ($input_polish_data);

    INSERT INTO table_name (polish_title) 值 ('$polish_input');

当波兰标志是您输入的一部分时,您将在 mysql 表中看到奇怪的数据(通过 phpmyadmin)

如果这行得通,您的所有 mqsql(文本)列都应该更改为 utf8_bin。为了让您自己轻松输入,您可以创建一个函数,在这些输入进入 mysql DB 之前“清理”您网站上的所有 $_POST 输入。

最大的优点是来自其他国家的访客会看到您的母语字母和标志(这也很重要)。

编辑(感谢常识用户输入)

是的,在你的标题中也必须包含这个

header('Content-Type: text/html; charset=utf-8');
于 2012-12-28T04:36:10.647 回答
0

我无法评论你的帖子.....所以我建议在这里~_~
这里,它说 utf8_encode — 将ISO-8859-1字符串编码为 UTF-8
因此,我的问题是:你的输出是 ISO- 8859-1?
也许你可以创建一个正常的英语测试记录,然后再试一次。

于 2012-12-28T03:18:34.813 回答
-1

在您的 HTML 代码中,尝试:

<meta http-equiv="content-type" content="text/html; charset=utf-8">
于 2012-12-28T04:53:32.170 回答