dot*_*tty 0 php mysql encode decode
Hay,我做了一个简单的应用程序,用户将内容上传到MySQL数据库,但是某些实体没有被编码.这样的事情出现了
ââ¬Å
Run Code Online (Sandbox Code Playgroud)
而不是报价而不是报价.我知道应该在将这些值插入数据库时将这些值编码为HTML实体,但是现在有几千行包含数据.
当数据返回到浏览器时,我们是否有PHP函数来编码这些值?
Alex Brown更新.由于编码可能也是一个问题,这就是我所看到的:

您的用户的浏览器正在提交UTF-8编码的数据,但您正在连接到数据库,其中1)假设您正在提交latin1编码的数据2)将您的数据存储为latin1编码的字符串.因此,您的数据存储错误编码.
当你从数据库中检索数据时,它将作为latin1字符串提供,但因为latin1字符串只是错误编码的UTF-8,并且PHP天真地将所有字符串视为二进制字符串,你只需要再次返回原始的UTF-8字符串.当您将此字符串回显到再次声明为UTF-8编码的HTML页面时,该字符串将显示为用户提交的字符串.
但是,如果使用对MySQL处理字符集有深入理解的软件查看数据库的内容,该软件会将列字符集标识为latin1,并确保它显示的字符确实是latin1字符串的字符,正如我们所指出的那样是错误编码的UTF-8.因此,您会看到错误编码的数据.
您应该采取一些措施来解决这个问题.首先,您期望处理UTF-8编码的数据(在HTML级别声明),因此您应该确保这也是您与MySQL通信的方式.SET NAMES 'utf8'无论何时形成与数据库的连接,都可以执行此操作.(注意:您的数据库API可能会提供一个特殊的功能来更改连接字符集.我认为mysqlAPI没有,但我不确定.)
其次,您应该确保存储UTF-8编码的数据.这意味着您的数据库列的字符集应该是utf8.可以使用该ALTER TABLE ... MODIFY语句更改列字符集.不要忘记也更改表默认字符集(这会为添加到未明确指定字符集的表中的新列设置字符集).并且在您使用时更改数据库字符集.
但是,当您更改列字符集时,MySQL假定已存储在该表的行中的数据不会被错误编码,而是存储在旧字符集中的有效数据.因此,它会将您的错误编码的UTF-8数据(它被视为latin1编码数据)转换为UTF-8编码数据,这样您就可以获得双UTF-8编码的数据.有一个技巧可以解决这个问题:首先将列字符集转换为binary字符集,然后再转换binary为utf8.这样,MySQL不会更改数据的二进制形式,因为您通过将其视为任意二进制字符串的格式进行转换.
祝好运!