Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入数据库的值显示奇怪的字符_Php_Mysql_Database_Utf 8 - Fatal编程技术网

Php 插入数据库的值显示奇怪的字符

Php 插入数据库的值显示奇怪的字符,php,mysql,database,utf-8,Php,Mysql,Database,Utf 8,我从readability获取xml提要中的数据,并将其插入数据库,然后输出。xml提要的字符集是UTF-8,我的html页面标题也是UTF-8。我甚至通过我的文本编辑器将代码保存为UTF-8,并且我的DB设置为utf8\u unicode\u ci。我不明白为什么会这样 代码: 你的问题是你把$DB->set_字符集('utf8')放在哪里 在执行查询之前,您需要告诉数据库您发送或希望接收数据的字符集 但是因为您有$DB->set_字符集('utf8')查询后,该命令对以前的查询无效 如果没有

我从readability获取xml提要中的数据,并将其插入数据库,然后输出。xml提要的字符集是
UTF-8
,我的html页面标题也是
UTF-8
。我甚至通过我的文本编辑器将代码保存为
UTF-8
,并且我的DB设置为
utf8\u unicode\u ci
。我不明白为什么会这样

代码:


你的问题是你把
$DB->set_字符集('utf8')放在哪里

在执行查询之前,您需要告诉数据库您发送或希望接收数据的字符集

但是因为您有
$DB->set_字符集('utf8')查询后,该命令对以前的查询无效

如果没有为连接定义字符集,则DMBS使用在配置中设置为默认值的字符集。 对于mysql,这可能是例如
latin1
。 正因为如此,mysql认为它接收到的数据是用拉丁语编码的,例如,
latin1
,并将其转换为
utf8
,这就是为什么你会看到这些奇怪的符号

要解决这个问题,您只需确保
$DB->set_字符集('utf8')utf8
中接收数据的查询之前调用code>


例如,您可以将其放在
if($DB->connect\u errno){}
后面,因为在该位置成功建立了连接。

您可以设置
$DB->set\u字符集('utf8')在查询之后,但需要在queries@t.niese有人给我做了这个,所以我不知道该把它放在哪里。我应该把它放在我的connect之后吗?@t.niese我把它放在$SQL之前,它就工作了。令人尴尬的问题。你能把你的建议写进答案吗?谢谢你的广泛评论。我真的很感激。@ChrisBurton np,只要你花时间详细说明问题(例如,显示你检查了所有东西都在
utf8
),花时间写一个答案是没有问题的。如果问题很清楚,那么它也可能对其他人有所帮助。@ChrisBurton另一个注意事项是:当你将
php
文件保存为
utf8
时,要小心,有两种方法可以这样保存它们,带和不带,请确保保存文件时始终不带BOM,否则您的文档前面会有3个不可见字节,这可能/将导致编码/呈现问题和其他意外行为,因为这样数据将在第一个
之前提交,这将证明对我正在编写的另一个应用程序很有帮助。当我保存(没有BOM)为UTF8时,我很好奇BOM是什么。谢谢你的补充信息。
$xml = simplexml_load_file( "http://readability.com/christopherburton/latest/feed" );
$json = json_encode( $xml );
$array = json_decode( $json,TRUE );
$items = $array['channel']['item'];

$DB = new mysqli('localhost', 'secret', 'secret', 'secret' );
if( $DB->connect_errno ){
    print "failed to connect to DB: {$DB->connect_error}";
    exit( 1 );
}
$match = "#^(?:[^\?]*\?url=)(https?://)(?:m(?:obile)?\.)?(.*)$#ui";
$replace = '$1$2';
 
foreach( $items as $item ){
    $title = $item['title'];
    $url = preg_replace( $match,$replace,$item['link'] );
    $title_url[] = array( $title,$url );
    $sql_values[] = "('{$DB->real_escape_string( $title )}','{$DB->real_escape_string( $url )}')";
}
$SQL = "INSERT IGNORE INTO `read`(`title`,`url`) VALUES\n ".implode( "\n,",array_reverse( $sql_values ) );
if( $DB->query( $SQL ) ){
} else {
    print "failed to INSERT: [{$DB->errno}] {$DB->error}";
}
$DB->set_charset('utf8');