我有一堆不是UTF-8编码的文件,我正在将一个站点转换为UTF-8编码.
我正在使用简单的脚本来保存我想要保存在utf-8中的文件,但文件以旧编码保存:
header('Content-type: text/html; charset=utf-8');
mb_internal_encoding('UTF-8');
$fpath="folder";
$d=dir($fpath);
while (False !== ($a = $d->read()))
{
if ($a != '.' and $a != '..')
{
$npath=$fpath.'/'.$a;
$data=file_get_contents($npath);
file_put_contents('tempfolder/'.$a, $data);
}
}
Run Code Online (Sandbox Code Playgroud)
如何以utf-8编码保存文件?
当使用"特殊"Unicode字符时,它们在编码为JSON时会变成奇怪的垃圾:
php > echo json_encode(['foo' => '?']);
{"foo":"\u99ac"}
Run Code Online (Sandbox Code Playgroud)
为什么?我的编码错了吗?
(这是一个一劳永逸地澄清这个话题的参考问题,因为这一次又出现了.)
我没有找到解决方案。
\n\n我有一个 API 女巫给我 JSON 响应,
\n\nhttp://api.vajehyab.com/v2/public/?q=%D8%B3%D9%84%D8%A7%D9%85&developer=stackoverflow
\n\n是这样的,
\n\n\n\n\n{“搜索”:{“q”:“\\ u0633 \\ u0644 \\ u0627 \\ u0645”,“代码”:200},“数据”:{“标题”:“\\ u0633 \\ u0644 \\ u0627\\u0645","发音":"","文字":"(\\u0633\\u064e) [ \\u0639 . ] (\\u0645\\u0635 \\u0644 .) 1 - \\u062f\ \u0631\u0648\u062f \u06af\u0641\u062a\u0646 .2 - \u0628\u06cc \u06af\u0632\u0646\u062f \u0634\u062f\u0646 . 3 - \\u06af\\u0631\\u062f\\u0646 \\u0646\\u0647\\u0627\\u062f\\u0646 . \\u061b ~ \\u0639\\u0644\\u06cc\\u06a9 \\u062f \\u0631\\u0648\\u062f \\u0628\\u0631 \\u062a\\u0648 \\u0628\\u0627\\u062f.\\u061b ~ \\u0639\\u0644\\u06cc\\u06a9\\u0645 \\u062f\\u0631\\u0648\\u062f \\u0628\\u0631 \\u0634\\u0645\\u0627。”,“来源”:“\\u0641\\u0631\\u0647\\u0646\\u06af \\u0641\\u0627\\u0631\\u0633\\u06cc \\u0645\\u0639\\u06cc\\u0646 | \\u0648\\u0627\\u0698\\u0647 \\u06cc\\u0627\\u0628" ,"永久链接":"?q=%D8%B3%D9%84%D8%A7%D9%85"},"错误":{"消息":"","原因":""},"广告":{"text":"","url":""}}
\n
它似乎没有问题,我可以在其他工具中解码它,但 PHP,我不能在 PHP 中解码它
\n\n$json = file_get_contents(\'http://api.vajehyab.com/v2/public/?q=\'.urlencode(\'\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85\').\'&developer=stackoverflow\');\nvar_dump(json_decode($json)); // null\n …Run Code Online (Sandbox Code Playgroud)