我在我的页面中回应了一些带有重音的单词,有时会像这样打印出来:
acatl��n de ju��rez
再次刷新页面几次后,它会像这样打印出来:
acatlán de juárez
这个过程来回重复。这不应该在我的应用程序中发生,因为我用这些词比较了很多东西。
我的标题上已经有utf-8了
<meta charset="UTF-8">
使用的数据库归类:utf8_unicode_ci
导致此错误的变量的分配如下:
$theString = "acatlan de juarez";
$a = array(
'animal' => array('acatlán de juárez','hów','áre'),
'color' => array('yóu','good','thanks')
);
$b = array(
'animal' => array('acatlan de juarez','how','are'),
'color' => array('you','good','thanks')
);
$theString = str_replace($b['animal'], $a['animal'], $theString);
// $theString now is $theString = "Acatlán de Juárez"
所以$theString
变量,当回显或进行查询时,有时会打印“acatl ndeju rez”,有时会打印“acatlándejuárez”。
修改
我开始收到很多关于数据库查询的答案,它实际上与数据库无关,重音符号正确地从数据库中删除。问题在于上面代码中解释的变量$ theString,它的打印方式不应该是带有重音符号。
编辑2
我不知道现在发生了什么,我真的很困惑,在这个例子中:
$a = array(
'animal' => array('acatlán de juárez','hów','áre'),
'color' => array('yóu','good','thanks')
);
echo $a['animal'][0];
我的代码完美地输出了“acatlándejuárez”这个词。
但是我有我的数组$ cities(就像我的数组$ a),但有州和城市。像这样:
$cities = array(
'state1' => array('acatlán de juárez','city1','city2'),
'state2' => array('city1','city2','city3')
);
echo $cities['state1'][0];
现在“acatlándejuárez”变成了“acatl ndeju rez”......为什么?!?
编辑3
问题解决了,这是charset格式的另一个功能,谢谢大家。
答案 0 :(得分:2)
几周前我和你的问题完全一样,修改了数据库COLLATE和CHARSET以及我如何处理MySQL查询后问题解决了。 My post is here.
utf8mb4 - utf8mb4_unicode_ci
utf8mb4_unicode_ci
。<meta charset="utf-8">
。$mysqli->set_charset('utf8mb4');
注意:我建议您阅读为什么utf8mb4
或为什么不utf8
。另请阅读this。
示例表
CREATE TABLE `quote` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`code` char(4) COLLATE utf8mb4_unicode_ci NOT NULL',
`quote` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
示例选择
注意:请注意set_charset()
$mysqli->set_charset('utf8mb4');
$result = $mysqli->query('SELECT * FROM quote');
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
//Do something with $row
}
示例INSERT / UPDATE
$mysqli->set_charset('utf8mb4');
$sql = "INSERT INTO quote (code, quote) VALUES (?, ?)";
//$sql = "UPDATE ......";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('ss', $_POST['code'], $_POST['quote']);
if (! $stmt->execute()) {
echo $stmt->error;
}
echo 'Nice one';
答案 1 :(得分:1)
它是一个字符集错误。
这是一个简单的模型:
<?php
header('Content-Type: text/html; charset=utf-8');
$theString = "acatlan de juarez";
$a = array(
'animal' => array('acatlán de juárez','hów','áre'),
'color' => array('yóu','good','thanks')
);
$b = array(
'animal' => array('acatlan de juarez','how','are'),
'color' => array('you','good','thanks')
);
$theString = str_replace($b['animal'], $a['animal'], $theString);
?>
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php echo $theString; ?>
</body>
</html>
对于数据库,如果您使用的是MySQL或MySQLi:
//MYSQL
mysql_connect('host','usuer','pass');
mysql_select_db('database');
mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');
//MYSQLi
$mysqli = new mysqli('host', 'user', 'pass', 'database');
$mysqli->set_charset("utf8");
你必须要使用你的数据库来使用的内容:utf8_unicode_ci
答案 2 :(得分:0)
此线程已解决。还有另一个函数导致字符串松散charset格式。我无法删除此帖子,但谢谢大家的帮助。你一直都是对的。