当前位置: 首页 > 面试题库 >

UTF8编码问题-有很好的例子

叶鸿煊
2023-03-14
问题内容

我遇到以下字符编码问题,以某种方式设法将具有不同字符编码的数据保存到数据库(UTF8)中,下面的代码和输出显示2个示例字符串以及它们的输出方式。其中之一需要更改为UTF8,而另一个已经更改为。

如何/应该去检查是否应该对字符串进行编码? 例如,我需要正确输出每个字符串,那么如何检查它是否已经是utf8或是否需要转换?

我正在使用PHP 5.2,mysql myisam表:

CREATE TABLE IF NOT EXISTS `entities` (
  ....
  `title` varchar(255) NOT NULL
  ....
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

<?php
$text = $entity['Entity']['title'];
echo 'Original : ', $text."<br />";
echo 'UTF8 Encode : ', utf8_encode($text)."<br />";
echo 'UTF8 Decode : ', utf8_decode($text)."<br />";
echo 'TRANSLIT : ', iconv("ISO-8859-1", "UTF-8//TRANSLIT", $text)."<br />";
echo 'IGNORE TRANSLIT : ', iconv("ISO-8859-1", "UTF-8//IGNORE//TRANSLIT", $text)."<br />";
echo 'IGNORE   : ', iconv("ISO-8859-1", "UTF-8//IGNORE", $text)."<br />";
echo 'Plain    : ', iconv("ISO-8859-1", "UTF-8", $text)."<br />";
?>

输出1:

Original : France Télécom
UTF8 Encode : France Télécom
UTF8 Decode : France T�l�com
TRANSLIT : France Télécom
IGNORE TRANSLIT : France Télécom
IGNORE : France Télécom
Plain : France Télécom

输出2:

Original : Cond� Nast Publications
UTF8 Encode : Condé Nast Publications
UTF8 Decode : Cond?ast Publications
TRANSLIT : Condé Nast Publications
IGNORE TRANSLIT : Condé Nast Publications
IGNORE : Condé Nast Publications
Plain : Condé Nast Publications

感谢您在此上花费的时间。字符编码,我相处得不好!

更新:

echo strlen($string)."|".strlen(utf8_encode($string))."|";
echo (strlen($string)!==strlen(utf8_encode($string))) ? $string : utf8_encode($string);
echo "<br />";
echo strlen($string)."|".strlen(utf8_decode($string))."|";
echo (strlen($string)!==strlen(utf8_decode($string))) ? $string : utf8_decode($string);
echo "<br />";

23|24|Cond� Nast Publications
23|21|Cond� Nast Publications

16|20|France Télécom
16|14|France Télécom

问题答案:

这可能是该mb_detect_encoding()功能的工作。

以我有限的经验,当用作通用的“编码嗅探器”时,它不是100%可靠的-它会检查某些字符和字节值的存在以进行有根据的猜测-
但在这种情况下(它需要区别只是UTF-8和ISO-8859-1),它之间 应该 工作。

<?php
$text = $entity['Entity']['title'];

echo 'Original : ', $text."<br />";
$enc = mb_detect_encoding($text, "UTF-8,ISO-8859-1");

echo 'Detected encoding '.$enc."<br />";

echo 'Fixed result: '.iconv($enc, "UTF-8", $text)."<br />";

?>

对于不包含特殊字符的字符串,可能会得到不正确的结果,但这不是问题。



 类似资料:
  • 我正在移动我的网站到另一个主机,因为它缺乏支持,从星期六起就不运作了。 在新的主机上,我的网站将一些字符显示为带有问号()的黑色菱形,而不是正确的符号(á,ç,è,等等) 它是使用phpadmin导入的,并且映射字符集被设置为UTF-8 null 谢谢

  • 我有这样一个csv文件 我在读书

  • 本文向大家介绍PHP和Mysql中转UTF8编码问题汇总,包括了PHP和Mysql中转UTF8编码问题汇总的使用技巧和注意事项,需要的朋友参考一下 一个网站如果需要国际化,就需要将编码从GB2312转成UTF-8,其中有很多的问题需要注意,如果没有转换彻底,将会有很多的编码问题出现! PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/

  • 出于测试的目的:当它解析数据时,我将一些数据输出到一个呈现完美的浏览器。。 然后我试着用php将它写到一个文件中,如下所示- 和 和

  • 问题内容: 我正在将WordPress博客和phpBB论坛迁移到新的托管服务器中。我正在使用phpMyAdmin从先前站点中的数据库导入SQL脚本。 当我用Kate打开.sql脚本时,它说它使用UTF8作为编码。当我在新服务器中导入sql时,可以在phpMyAdmin中选择编码,默认情况下选择utf8。 仍然,当我完成数据库的导入后,我直接在phpMyAdmin中阅读了帖子文本,并看到诸如“é”,

  • 问题内容: 我有下表: 我要插入数据,如下所示: 但是,当我检索数据时,它们类似于。 有什么问题,我该如何解决? 问题答案: 根据MySQL JDBC驱动程序文档,您还需要在JDBC连接URL中设置字符编码。这是一个例子: 否则,MySQL JDBC驱动程序将使用平台默认编码在通过网络发送之前将字符转换为字节,在您的情况下显然不是UTF-8。然后,所有未发现的字符将被问号替换。 另外,在检索数据时