实际字符串:
$sub"=?UTF-8?Q?=e2=99=a3?= Styles to =?UTF-8?Q?=e2=99=a3?="
UTF value is decoded using:
header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding('utf-8');
$subjectvalue=mb_decode_mimeheader($sub);
当我回显浏览器上显示的$subjectvalue
期望值时,所需的值为:
♣ Styles to ♣
问题:
当我尝试插入$subjectvalue
的值时,插入的值看起来像
♣ Styles to ♣
为什么插入的值不会在浏览器上回显。 如果编码,如何管理和插入主题行的值。
答案 0 :(得分:3)
当您连接到MYSQL数据库时,请尝试在连接后运行
SET names 'utf8'
我已经准备好了整个测试:
1)我创建了名为 testencoding
的数据库2)我创建了样本表:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
CREATE TABLE IF NOT EXISTS `sample` (
`id` int(11) NOT NULL,
`value` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
ALTER TABLE `sample`
ADD PRIMARY KEY (`id`);
ALTER TABLE `sample`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
您可以使用phpmyadmin
将其导入数据库3)
我已经创建了测试PHP脚本:
<?php
$sub = "=?UTF-8?Q?=e2=99=a3?= Styles to =?UTF-8?Q?=e2=99=a3?=";
header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding('utf-8');
$subjectvalue=mb_decode_mimeheader($sub);
$subjectvalue2 = '会意字 / 會 huìyìzì ';
echo $subjectvalue."<br />";
echo $subjectvalue2."<br />";
$link = mysqli_connect("localhost","root","","testencoding");
mysqli_query($link,"SET NAMES 'utf8'");
mysqli_query($link,"INSERT INTO sample(`value`) VALUES('".mysqli_real_escape_string($link,$subjectvalue)."')");
mysqli_query($link,"INSERT INTO sample(`value`) VALUES('".mysqli_real_escape_string($link,$subjectvalue2)."')");
$result = mysqli_query($link, "SELECT * FROM sample");
echo "<br /><br />Data from database<br /><br />";
while ($data = mysqli_fetch_assoc($result)) {
echo $data['id'].' '.$data['value']."<br />";
}
4)结果是:
在phpmyadmin中:
在PHP脚本中:
总而言之,一切都按预期进行。数据按原样插入,phpmyadmin中的数据和通过php从数据库中读取的数据与插入的数据相同