PHP,MySQL编码UTF-8

3
我正在进行基本的PHP和MySQL搜索操作。 我们国家通常使用UTF-8或EUC-KR字符编码。
当我输入英文关键词时,结果显示良好。 但是,输入韩文关键词时,结果不会在屏幕上显示。 (结果计数不显示) 我在Eclipse PDT上编写代码, 每个HTML、PHP文档的编码都是EUC-KR。我进行了属性设置。 MySQL的表格排序规则为euckr_korean。 我不知道该怎么办。我是PHP的新手。
代码很简单,只有两个文件。
index.html
<body>
    <form action="./search.php" method="get">
    <label> 
        Search
        <input type="text" name="keywords"> 
        <input type="submit" value="Search">
    </label>
    </form>
</body>

search.php

<?php



$db = new mysqli('localhost', 'root', 'apmsetup', 'consen');

if(isset($_GET['keywords'])){

$keywords = $db->escape_string($_GET['keywords']);

$query = $db->query("
        SELECT title
        FROM data
        WHERE title LIKE '%{$keywords}%' 
        ");
?>


<div class="result-count">
    Found <?php echo $query->num_rows; ?> results. </div>


<?php 
}

?>

数据库表

text         |  code

삼성전자      | 005930
현대차        |    005380
LG           |  003550

当我输入“LG(英语)”,结果计数为1(正确显示)。
如何解决这个问题?我需要你的帮助...谢谢。 输入图像描述

1
我们真的不需要看到你的mysqli DB连接变量。这样做只会暴露你的账户登录和密码,没有必要这么做。 - light
2个回答

2
您没有在 search.php 中指定字符集。您也没有向我们显示 index.html 中的 <meta charset> 设置。
我猜测可能发生的情况是:
  1. index.html 以 UTF-8 / EUC-KR 格式发送 GET 变量(keywords)。
  2. search.php 接收到一个字节流,并将其作为 UTF-8 进行处理(存在问题)。
  3. search.php 查询数据库时,对于非英文字符使用了一些无意义的字符。它在 MySQL 中找不到匹配的行,因此不显示任何结果。
请记住,每个 PHP 文件实际上最终都是客户端的 HTML 文件。在您的情况下,您的 search.php 将评估为一个单行 HTML 文件,其内容如下:
<div class="result-count">Found X results.</div>

请注意,这篇文件缺少 <!DOCTYPE><meta charset> 声明。HTML4 浏览器通常默认使用 ISO-8859-1编码,而 HTML5 浏览器则默认使用 UTF-8 编码,因此问题在于此。

为解决该问题,请始终以以下方式开始每个 HTML 页面:

<!DOCTYPE html>
<html lang="en"> <!-- or whatever language code -->
   <head>
       <meta charset="utf-8"> <!-- or whatever charset -->
       <title>...</title>
       ...
   </head>

最后,强烈建议使用UTF-8编码。对于网络来说更好。

谢谢您的友好回答。对我来说非常有帮助。但是,“meta charset”声明已经包含在HTML文件中了。“<meta charset =“ utf-8”>”我正在寻找另一种解决方案……当我找到它时,我会在这个页面上写下来。谢谢……我将euc-kr更改为utf-8……谢谢…… - ton1
那么...你是使用EUC-KR还是UTF-8呢?你需要确保在所有地方都使用相同的编码。 - light

0

我终于得到了线索,这是一个关于默认mysql字符集的问题。 在search.php中添加'binary()',结果显示良好。

$query = $db->query("
    SELECT title
    FROM data
    WHERE binary(title) LIKE '%{$keywords}%' 
    ");
?>

为了避免以后出现同样的问题,您需要在mysql上设置字符集值(在Linux中是my.cnf,在Windows中是my.ini)。您可以通过mysql控制台检查默认字符集。
mysql > show variables like '%char%';

首先,您需要通过编辑mysql文件夹中的documnet my.cnf或my.ini来将字符集设置为另一个。

其次,在您的php文档中导入它。

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

第三步,将其导入您的HTML文档中。
<meta charset="utf-8">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接