插入MYSQL表时主题行的值更改

时间:2014-05-10 20:33:38

标签: php mysql encoding utf-8

实际字符串:

$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 ♣

为什么插入的值不会在浏览器上回显。 如果编码,如何管理和插入主题行的值。

1 个答案:

答案 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中:

Result from phpmyadmin

在PHP脚本中:

Result from php

总而言之,一切都按预期进行。数据按原样插入,phpmyadmin中的数据和通过php从数据库中读取的数据与插入的数据相同