Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.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/3/html/74.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 黑钻石问号vs.某些字符的丢失_Php_Html_Unicode_Encoding - Fatal编程技术网

Php 黑钻石问号vs.某些字符的丢失

Php 黑钻石问号vs.某些字符的丢失,php,html,unicode,encoding,Php,Html,Unicode,Encoding,我读过这个问题,以前也遇到过,但我还没有找到解决这两方面问题的办法。我有一个新闻聚合器,可以从RSS提要中获取新闻。在显示内容时,我得到了黑钻石问号,因此在做了一些研究之后,我添加了以下代码行(PHP): 这成功地解决了这个问题,但看看另一篇文章,其中有一些带有重音的西班牙语单词,我注意到这些重音已经转换成了时髦的字符。他们以前看上去很好。例如,现在我看到的是: 蒂卡斯将军 现在,我宁愿有第二个问题,因为它不太突出,但理想情况下,我想解决这两个问题。我的MySQL表是UTF-8,也是页面的doc

我读过这个问题,以前也遇到过,但我还没有找到解决这两方面问题的办法。我有一个新闻聚合器,可以从RSS提要中获取新闻。在显示内容时,我得到了黑钻石问号,因此在做了一些研究之后,我添加了以下代码行(PHP):

这成功地解决了这个问题,但看看另一篇文章,其中有一些带有重音的西班牙语单词,我注意到这些重音已经转换成了时髦的字符。他们以前看上去很好。例如,现在我看到的是:

蒂卡斯将军


现在,我宁愿有第二个问题,因为它不太突出,但理想情况下,我想解决这两个问题。我的MySQL表是UTF-8,也是页面的doctype。有什么想法吗?

您正在从多个提要中提取数据,因此您不能依赖于所提取的所有提要都具有相同的字符编码

XML提要应该在XML前言中声明它们是什么字符集,服务器应该发送头,说明文件使用的字符编码,但它们不一定存在,如果存在,则不一定准确

您可以使用来尝试找出正在解析的文件使用了什么编码,但同样,这并不是100%确定是准确的

因此,如果您的目标是将正在处理的所有提要规范化为相同的字符集(我猜是UTF 8),那么您可以选择查看XML前导、头(如果已发送适当的头)和mb_detect_编码的结果来确定编码。如果以上都同意,您可能(但不一定)对文件的编码方式以及转换文件所需的操作有一个很好的了解。如果这些方法之间存在分歧,那么你必须自己决定采取什么行动


简而言之,欢迎来到charset地狱。你觉得怎么样

由于您是从不同的提要聚合的,这些提要都有不同的编码类型,因此需要某种形式的转换。如果我没记错的话,所有的字符集都可以通过某种方式转换成utf8,尽管每个字符集的格式不同。法维德,我想看看这个问题的答案!通过使用mb_detect_编码,我能够解决问题。我说如果编码不是UTF-8,那么使用mb_convert_编码并转换文本,否则就不用管它了。谢谢
$content = mb_convert_encoding($content, 'UTF-8', 'HTML-ENTITIES');