我正在使用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');
?>
Run Code Online (Sandbox Code Playgroud)
“ 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';
Run Code Online (Sandbox Code Playgroud)
......
<div class="main_text">
<?
$result = $mysql->query('SELECT * FROM homepage');
while($row = mysqli_fetch_array($result)){
echo "".$row['title']."<br />".$row['text_heb']."";
}
?>
</div>
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我解决这个问题吗?
您必须更改字符集才能使其工作:
<?php
$mysql->set_charset('utf8');
$result = $mysql->query('SELECT * FROM homepage');
...
?>
Run Code Online (Sandbox Code Playgroud)
@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');
?>
Run Code Online (Sandbox Code Playgroud)
另外,请确保将归类设置为utf8_general_ci。
一种较旧的方法是将名称设置为utf8:
<?php
$mysql->query("SET NAMES 'utf8'");
$result = $mysql->query('SELECT * FROM homepage');
...
?>
Run Code Online (Sandbox Code Playgroud)
但是根据set_charset()文档,第一个是可取的:
注意:这是更改字符集的首选方法。不建议使用mysqli_query()进行设置(例如SET NAMES utf8)。有关更多信息,请参见MySQL字符集概念部分。