gpt4 book ai didi

php - 无法在 PHP 中解码 UTF8?

转载 作者:行者123 更新时间:2023-11-30 22:40:35 24 4
gpt4 key购买 nike

我每 3/10/60 分钟从在线供稿器获取 XML 供稿。

我使用 SimpleXML 解析提要

最后我将它存储到数据库并从 html 上的数据库中获取。

现在我确定问题不在数据库和 feed 中,因为当我手动尝试时同一个表接受 UTF8 字符

CALL myProc('čćžš')

当我从提要中解析 xml 并将其存储到数据库时,我正在使用相同的过程。

而且提要通常有 UTF8 字符。

所以我认为问题出在 php 中,当我解析文件时

public function parseFile($path){
$xml = '';
$dec_file = '';
if(!is_null($path)){
$opts = array('http' => array('header' => 'Accept-Charset: UTF-8, *;q=0'));
$context = stream_context_create($opts);

$file = file_get_contents($path,false,$context);
//$file = mb_convert_encoding($file, 'HTML-ENTITIES', "UTF-8");
if(!is_null($file)){
$xml = new SimpleXMLElement($file);
}
else{
echo 'there is no file';
}
}
else{
echo 'Wrong path!';
}
return $xml;
}

这里的$xml不是UTF8的。

我试着这样做:

    private function toUTF8($data){
$utf8 = utf8_encode($data);
return $utf8;
}

我还使用了 utf8_encode :mb_converticonv,我在谷歌上找到的所有东西我都用过,但没有成功......

我正在使用 PDO,还有 utf8 属性,我也尝试设置名称,甚至是已经在数据库中定义的设置名称。

$this->PDO->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "charset='UTF-8'");

varchar 的每一列都有 utf8 整理。我几乎可以肯定问题不在数据库内部,因为同一个表接受 čćšž。所以我请您先想想 PHP 内部可能存在什么问题。

还有

ini_set('default_charset','utf-8');

table 固定装置:

    CREATE TABLE IF NOT EXISTS `jcjdkdtaur`.`fixtures` (
`Id` INT(32) NOT NULL,
`UpdatedDate` varchar(100) DEFAULT NULL,
`DateTime` datetime NULL DEFAULT NULL,
`Date` date NULL DEFAULT NULL,
`Time` time NULL DEFAULT NULL,
`Status` VARCHAR(40) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL,
`League` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL,
`LeagueID` INT(11) DEFAULT NULL,
`SportID` tinyint DEFAULT 1,
`SportName` varchar(30) DEFAULT 'football',
`Cup` varchar(20) DEFAULT NULL,
`Country` VARCHAR(60) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL,
`EventName` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL,
`HomeTeam` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL,
`HomeTeam_Id` INT(11) NULL DEFAULT NULL,
`AwayTeam` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NULL DEFAULT NULL,
`AwayTeam_Id` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`Id`,`HomeTeam_Id`,`AwayTeam_Id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

我不知道该怎么办了......

最佳答案

不要使用 utf8_encode、mb_convert、iconv 或 mb_convert_encoding。

CONVERT(BINARY(CONVERT(CONVERT(BINARY(
CONVERT('Série' USING latin1))
USING utf8) USING latin1)) USING utf8)
--> 'Série'

我的结论是你有“双重编码”。这是可能发生的事情。

  • 客户端的字符编码为 utf8(好);和
  • SET NAMES latin1 谎称客户端有 latin1 编码;和
  • 表中的列声明为 CHARACTER SET utf8(良好)。

这似乎应该处理 SET NAMES

$this->PDO->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "charset='UTF-8'");

那是什么时候做的?连接前?后?通常它是在连接期间完成的:

PDO: $db = new PDO('dblib:host=host;dbname=db;charset=UTF-8', $user, $pwd); 

关于php - 无法在 PHP 中解码 UTF8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31220752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com