提问者:小点点

用php在数据库中插入特殊字符


我有一个joomla数据库,其中的mySQL连接排序规则是UTF8_General_CI。我在数据库中有一些额外的数据表(与joomla安装无关),我想用PHP脚本中的数据填充这些数据表。

后期编辑:勾选下方

当我尝试插入特殊字符(特定于语言和地区的字符)时,我在数据库中得到的是jibberish(像:®?®?™?),而不是“?”。

joomla数据库中所有列的排序规则为:utf8mb4_unicode_ci(如果这有任何区别)

奇怪的是,如果我在电子邮件/移动应用程序(基于浏览器)中显示数据库的内容,它会正确地显示数据。但是我可以看出,从PHP中插入valus是不对的,因为如果我从phpmyadmin面板手动插入它,该值将正确地显示在表中。

<?php header('Content-type: text/html; charset=UTF-8');  //header is specified here

$value_to_insert = addslashes($_REQUEST['value']);   //get the value from the parameter

inserttask($value_to_insert); //insert the value into the datatable

function inserttask($value_to_insert)
{
    $con = mysqli_connect("host",username,password,database); //set up my mysqli connection
    //mysql_set_charset('utf8'); //this didn't help

    if (!$con)
    {
        die();
    }

    $sql = "INSERT INTO `table` (`value`) VALUES ('".mysqli_real_escape_string($con, $value_to_insert)."')";

    if($result=mysqli_query($con,$sql))
    {
        print "OK";
    }
    else
    {
        print "ERROR";
    }
}

?>

有什么想法,这个插入应该怎么做,使它兼容任何地区依赖的字符?

稍后编辑:我运行了“show variables like'%collation%'”collation_connection-utf8_general_ci collation_database-latin1_swedish_ci collation_server-latin1_swedish_ci

这会是问题所在吗?


共1个答案

匿名用户

在设置连接之后,我必须以特定的方式更改连接字符集。

$con = mysqli_connect("mydb12.surf-town.net","bosteen_licadm","Ugymate92","bosteen_p2p");

$con->set_charset("utf8");

在此之后,插入工作!