【发布时间】:2011-09-17 02:25:47
【问题描述】:
我这几天一直在寻找答案,到现在还没有找到答案……
我正在为客户建立一个网站,并且正在使用 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();
【问题讨论】:
标签: php mysql character-encoding mysqli special-characters