1

我正在使用 MySQLi 从数据库中检索信息。我所有的页面都用 UTF-8 编码,没有 BOM,我有 2 个页面要处理,但主要问题是数据库上的信息以常规方式显示 - 但是当我检索它时,它是这样的:

���������� - ����?

在 phpMyAdmin 面板上 - 列是 latin1_general_ci (我也尝试将其设为 utf8_general - 相同的输出!)。

“mysql.php”:

<?php
header('Content-type: text/xhtml; charset=windows-1255');
$mysql = new mysqli('localhost', 'elenbyin_vadim', 'pass33323', 'elenbyin_vadim');
?>

“index.php”,主要部分:

<?php
include ('mysql.php');
include('functions.php');

if($_GET["lang"] == 'rus')
    $lang = 'rus';
else if($_GET["lang"] == 'heb')
    $lang = 'heb';
else
    $lang = 'heb';

……

<div class="main_text">
<?

    $result = $mysql->query('SELECT * FROM homepage');
    while($row = mysqli_fetch_array($result)){
        echo "".$row['title']."<br />".$row['text_heb']."";
    }
?>
</div>

有人可以帮我解决这个问题吗?

4

1 回答 1

5

您必须更改字符集才能使其工作:

<?php
    $mysql->set_charset('utf8');
    $result = $mysql->query('SELECT * FROM homepage');
    ...
?>

@Class 的评论 - 如果您在所有页面中都需要它,您可以将其添加到mysql.php

<?php
    header('Content-type: text/xhtml; charset=windows-1255');
    $mysql = new mysqli('localhost', 'elenbyin_vadim', 'pass33323', 'elenbyin_vadim');
    $mysql->set_charset('utf8');
?>

另外,请确保将排序规则设置为utf8_general_ci.

一种较旧的方法是将名称设置为 utf8:

<?php
    $mysql->query("SET NAMES 'utf8'");
    $result = $mysql->query('SELECT * FROM homepage');
    ...
?>

但是根据set_charset()文档,第一个是可取的:

注意:这是更改字符集的首选方法。不推荐使用 mysqli_query() 设置(如 SET NAMES utf8)。有关更多信息,请参阅 MySQL 字符集概念部分。

于 2013-09-23T00:53:18.983 回答