所以我有这个文件(http://mountainmarathon.ch/components/com_chronoconnectivity6/chronoconnectivity/uploads/20190814194827_classifica-cat-standard-3.csv)哪个“应该”用utf-8编码。当我试图通过fgetcsv或file_get_内容读取内容时,我得到了那些黑色钻石,每个ä,ö,ü字符都带有问号。
我已经知道这是一个编码问题,但据我所知,一切都是/应该是utf-8,utf-8应该能够显示 ä,ö,ü, 对吗?
我已经在这里检查了很多可能的解决方案,但没有找到任何解决方案。当我用记事本打开文件时,我发现钻石也有同样奇怪的问题(即使当我试图改变编码时,它也会变成一个矩形)那么这就是文件?
不,那么当我在iphone上打开csv文件(内部邮件应用程序)时,特殊字符会正确显示。
到目前为止,我所尝试的是不同的mb_convert_编码解决方案和不同的堆栈溢出解决方案,但它们都不起作用。
我认为真的有些东西是不正确的这个文件,但为什么iPhone能够正确地呈现内容?
可以有人有更多的知道如何请检查文件,告诉我我可以做什么来导入/使用它的内容与PHP和摆脱那些编码问题?
通过标头将标头设置为UTF-8('Content-Type:text/html;charset=UTF-8');
在终端“file-I file”中返回UTF-8
我尝试了两台服务器(我的mamp使用php7.3.1)
我很抱歉,但我并没有发布过去三个小时里我在这里和其他平台上检查过的每个问题的每个链接。当然,我已经查阅了大量关于php手册的信息和评论(fgetcsv、mb_encode/check、utf8_encode/decode…等等),但没有找到解决我问题的方法。
最后,我检查了我的字符串(从文件获取内容)对这个函数:https://www.php.net/manual/de/function.mb-check-encoding.php#95289返回FALSE。
现在一切都没有意义了。
要复制的代码非常简单:
$content = file_get_contents($url);
var_dump($content);
我们如何才能将特殊字符显示为ä,ö,ü而不是带有问号的黑钻石。
最新消息
根据您的分析,我已经检查了文件保存的具体情况。
首先:我通过电子邮件收到csv,据我所知,它是在iso-8859-1中
iOS场景看起来是这样的:我在邮件应用程序中打开邮件,并直接在邮件应用程序中显示csv--
当我现在尝试使用这个文件和php的utf8_编码时--
因此,现在我必须了解之前的错误,因为这里是MacOS场景:
我打开(相同的)邮件并将相同的src文件保存到我的硬盘上,快速检查文件-现在我将UTF-8作为字符集。
在带有outlook的windows计算机上,保存文件,在记事本中打开,字符将被替换:ä=
我认为现在-发送这个csv的人必须将文件导出为utf-8,对我来说,它看起来像是iso-8859-1,计算机在保存文件时做了一些奇怪的事情,这可能吗?
这个回答可能有点曲折,但希望它能提供有用的信息。我正在终端窗口的ubuntu工作站上运行这些命令。
我用火狐下载了这个文件。响应头没有指定任何字符集:
$ curl -sSL -D - http://mountainmarathon.ch/components/com_chronoconnectivity6/chronoconnectivity/uploads/20190814194827_classifica-cat-standard-3.csv -o /dev/null
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Wed, 14 Aug 2019 21:24:00 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Keep-Alive: timeout=60
Location: http://www.mountainmarathon.ch/components/com_chronoconnectivity6/chronoconnectivity/uploads/20190814194827_classifica-cat-standard-3.csv
Strict-Transport-Security: max-age=63072000
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 14 Aug 2019 21:24:00 GMT
Content-Type: text/csv
Content-Length: 39626
Connection: keep-alive
Keep-Alive: timeout=60
X-Content-Type-Options: nosniff
Last-Modified: Wed, 14 Aug 2019 19:48:27 GMT
ETag: "9aca-590190a7aa557"
Accept-Ranges: bytes
Strict-Transport-Security: max-age=63072000
如果我检查文件的开头,我确实看到了您所说的奇怪字符:
head -c 30 20190814194827_classifica-cat-standard-3.csv
11;1;102;Claudio;Br�ndli;198
第一个奇怪的字符由3个字节表示,ef bf bd:
$ head -c 30 20190814194827_classifica-cat-standard-3.csv | xxd
00000000: 3131 3b31 3b31 3032 3b43 6c61 7564 696f 11;1;102;Claudio
00000010: 3b42 72ef bfbd 6e64 6c69 3b31 3938 ;Br...ndli;198
该字节序列对应于UTF-8替换字符,即,用于替换有问题字节序列的字符。这强烈表明原始文件本身没有您想要的带元音的字符,而是包含替换字符。
我曾尝试在文本编辑器(gedit)和LibreOffice calc中使用多种不同的编码打开此文件,但在我尝试的任何应用程序和编码组合中,字符都不会正确显示。
我将这3个umlaut字符放在一个字符串中,这些字符串都与文件中的3字节字符串不匹配:
$ echo "äöü" | xxd
00000000: c3a4 c3b6 c3bc 0a .......
为了澄清,我相信这些字符的UTF-8编码映射如下:
ä = c3a4
ö = c3b6
ü = c3bc
我可能错了,但我认为远程网站可能实际上包含UTF-8替换字符?我想知道,如果nginx服务器咳嗽的文件可能试图解释这个文件的内容和失败?我尝试设置一个PHP脚本来发送接受字符集标题,但它仍然会得到损坏的字符。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.mountainmarathon.ch/components/com_chronoconnectivity6/chronoconnectivity/uploads/20190814194827_classifica-cat-standard-3.csv");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = [
'Accept-Charset: utf-8',
'Accept-Encoding: gzip, deflate',
'Accept-Language: en-US,en;q=0.5',
'Cache-Control: no-cache',
// 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0'
'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1'
Firefox/68.0'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$server_output = curl_exec ($ch);
file_put_contents("server-output.csv", $server_output);
curl_close ($ch);
echo "DONE\n";
总而言之,我认为您的原始源文件已经将您想要的字符(ä、ö、ü等)替换为通用UTF8字符,用于表示误读的字节序列(�). 或者CSV文件由于某种原因被服务器屏蔽了?你能告诉我更多关于在iPhone上查看此文件的信息吗?你是在用你的iphone从这个url请求它吗?
出于测试的目的:当它解析数据时,我将一些数据输出到一个呈现完美的浏览器。。 然后我试着用php将它写到一个文件中,如下所示- 和 和
相关网站:http://nubix.ca/blog/we-have-a-drone-and-were-prepared-to-shot/
我有一个带有一些特殊字符的mysql数据库,一个输入表单,一些PHP页面。 > 这个页面发送(通过GET)一个参数到另一个php页面(ResultsPage)。 最后这个php页面(ResultsPage)向dbms发送一个带有参数的查询并显示结果。 RequestPage编码为utf-8至 meta http equiv=“Content Type”Content=“text/html;char
问题内容: 我使用特殊字符(瑞典字母åäö)。 现在,我有一些文件夹,其中包含分类图像。文件夹按类别命名。 我最多允许在我的网站上显示5张图片,每张图片以1-5卢比结尾。但是,我的问题是,每当文件夹名称包含特殊字符时,file_exists返回false,即找不到文件。即使它在那里。 所有文档均为utf-8格式。 当文件夹名称中没有特殊字符时,此方法有效。 如果您需要更多输入,请告诉我 问题答案:
我有一个导出CSV文件的PHP脚本。我的用户然后在Excel中编辑文件,保存它,并重新上传它。 如果他们在字段中键入欧元符号,则在上载文件时,欧元符号以及之后的所有内容都将丢失。我正在使用str_getcsv函数。 如果我尝试转换编码(比如UTF-8),欧元符号就会消失,我会得到一个缺少的字符标记(通常由一个空白的正方形或菱形中的问号表示)。 如何将编码转换为UTF-8,同时保留欧元符号(和其他非
我试图登录与超文本传输协议后使用。 我有像会话这样的参数 授权AOrSwPpS0tB6XXICp8IVE-9aGSkGeYGFxEvucSJHYYDZ。Wp-24VvrLR4-6Y9QO。 会话ljvrB3JGxTpHFkrtUSyQXJSRz4E7w5uSwQmTqfWWRBA-DYRKPT58UJQPU 我无法登录。请建议我解决这个问题。