我一直在寻找答案,但到目前为止还没有找到答案......
我正在为客户构建一个网站,并使用MySQL数据库存储菜单的数据,并使用PHP mysqli预处理语句来处理数据库。当我使用表单更新或添加行时,特殊字符插入错误,重音的“é”字符在提交时变为é。但是,如果我通过phpMyAdmin手动输入它们,它们会很好地显示出来。
我在$ mysqli对象之后添加了这个,但这里有一点运气
$mysqli -> set_charset( "utf8" );
这似乎只能使它与更新和插入命令一起使用,现在选择的任何内容都会显示“tilda A copyright”来代替重音e,所以它基本上是相同的问题,但是相反。
以下是我的一些受影响的PHP:
$mysqli = new mysqli( "localhost", "user", "pass", "db" );
$mysqli -> set_charset( "utf8" );
if( $_GET['mode'] == "edit" && $_GET['drink'] && $_POST['e_name'] ) {
$update = "update `menu` set `name` = ?, `description` = ?, `small` = ?, `medium` = ?, `large` = ?, `flavors` = ?, `section` = ?, `order` = ? where `id` = ?;";
$id = $_GET['drink'];
$nName = $_POST['e_name'];
$nDesc = $_POST['e_desc'];
$nSml = $_POST['e_prc1'];
$nMed = $_POST['e_prc2'];
$nLrg = $_POST['e_prc3'];
if( $_POST['e_flav'] == "on" )
$nFlv = 1;
else
$nFlv = 0;
$nSect = $_POST['e_sect'];
$nOrd = $_POST['e_ordr'];
if( $changeIt = $mysqli -> prepare( $update ) ) {
$changeIt -> bind_param( 'ssdddiiii', $nName, $nDesc, $nSml, $nMed, $nLrg, $nFlv, $nSect, $nOrd, $id );
$changeIt -> execute();
}
header( "Location: http://stackoverflow.com/" );
exit;
}
$mysqli -> close();
答案 0 :(得分:0)
你应该使用
query("SET NAMES utf8");
SET NAMES表示客户端将用于将SQL语句发送到服务器的字符集。因此,SET NAMES'utf8'告诉服务器,“来自此客户端的未来传入消息的字符集为utf8。”它还指定了服务器用于将结果发送回客户端的字符集。 (例如,如果使用SELECT语句,它指示要用于列值的字符集。)
还要确保
您为表/ db
设置了正确的存储编码CREATE TABLE{
...
}CHARSET=utf8;
或
CREATE DATABASE DEFAULT CHARACTER SET utf8
你的html输出是utf-8字符集。
Content-Type: text/html;charset=utf-8
现在,您的数据库/表将以utf-8存储值。数据将以utf-8发送和接收,页面将以utf-8显示。这应该可以解决你的问题。
答案 1 :(得分:0)