gpt4 book ai didi

php - 我从 Utf-8 mysql 表中获取 Ansi 字符串而不是 Utf-8

转载 作者:行者123 更新时间:2023-11-29 16:48:57 26 4
gpt4 key购买 nike

当我从 php mysql 共享主机迁移到我自己的 VPS 时,我发现从 mysql 数据库输出 ?�??????� 以 UTF8 格式输出用户名的代码而不是鬼神❗ 。我的页面有utf-8编码,我有 default_charset = "UTF-8"在 php.ini 中,以及 header('Content-Type: text/html; charset=utf-8');在我的 php 文件中,以及 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">在它的html部分。

我的数据库有排序规则utf8_bin,表也有相同的排序规则。在 phpmyadmin 中的先前和当前托管中,对于此数据库记录,我看到:鬼神❗ 。当我在 Notepad++ 中创建 ANSI 文本文件时,粘贴 鬼神❗进入它并在 UTF-8 菜单中选择 Encoding->Encode 我看到 鬼神❗ ,所以我认为它是正确编码的 UTF-8 字符串。

好的,然后我添加

init_connect='SET collation_connection = utf8_general_bin'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_general_bin
skip-character-set-client-handshake

到 my.cnf 现在我的页面显示 鬼神❗而不是?�??????� 。这与我在两个主机上的 phpmyadmin 中得到的输出相同,所以我的方法是正确的。并且仍然以某种方式在我的旧主机上相同的 php 脚本返回名称为 鬼神❗ 的 utf-8 网页。在新主机上 - 鬼神❗ 。看起来该字符串经过两次 utf-8 编码:我得到 utf-8 字符串,我将其作为 ansi 字符串提供给 Notepad++,然后它用正确的 utf-8 字符串对其进行编码。

但是当我尝试utf8_encode()时我得到й¬ÑзÒÑвÑâ ,和utf8_decode()返回?�??????? 。同样的结果返回mb_convert_encoding($name,"UTF-8","ISO-8859-1");iconv( "ISO-8859-1","UTF-8", $name);

那么我如何才能重现 Notepad++ 所做的相同转换呢?请参阅下面的答案。

最佳答案

解决方案很简单,但对我来说并不明显,因为我从未在该共享主机上看到 my.cnf:该服务器的设置似乎如下

init_connect='SET collation_connection = cp1252'
init_connect='SET NAMES cp1252'
character-set-server=cp1252

因此,为了不对我的新服务器上的其他代码造成损害,我必须将 mysql_query("SET NAMES CP1252"); 放置在每个使用 utf8 字符串的 php 脚本之上。这里的技巧是脚本按原样获取字符串 (ansi) 并将其输出,当浏览器收到警告页面采用 utf-8 编码时,它只会将我的字符串呈现为 utf-8。

关于php - 我从 Utf-8 mysql 表中获取 Ansi 字符串而不是 Utf-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933311/

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