You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用fopen/fwrite写入文件出现Unicode转义问题求助

解决PHP写入文件时UTF-8字符显示为Unicode转义的问题

咱们一步步排查解决,你遇到的问题大概率是写入时的编码处理、文件打开模式不对,或是后续查看文件的工具编码设置出了问题:

  • 先确认字符串的真实编码
    虽然你说打印正常,但可以先验证数组里的字符串是不是真的UTF-8编码。在代码里加一行检测:

    $testStr = "Délai de livraison"; // 或者直接取数组里的对应元素
    echo mb_detect_encoding($testStr, 'UTF-8, ISO-8859-1', true);
    

    如果输出是UTF-8,那字符串本身没问题;如果是ISO-8859-1,再用mb_convert_encoding($str, 'UTF-8', 'ISO-8859-1')转码就行——不过你说打印正常,应该是UTF-8没问题。

  • 立刻停止使用utf8_encode()!
    这个函数是把ISO-8859-1编码的字符串转成UTF-8,如果你的字符串已经是UTF-8,用它反而会把正确字符转成乱码,这就是你试了没用的核心原因,直接放弃这个方法。

  • 用二进制模式打开文件写入
    默认的fopen文本模式(比如'w')在不同系统下可能自动转换字符或换行,改用二进制模式'wb'能确保写入原始字节,避免编码被篡改:

    $fileHandle = fopen('你的目标文件.txt', 'wb');
    if ($fileHandle) {
        // 若需要兼容旧工具(比如旧版Excel)才加UTF-8 BOM,否则建议跳过
        // fwrite($fileHandle, "\xEF\xBB\xBF");
        fwrite($fileHandle, implode("\n", $你的数组)); // 先把数组转成字符串再写入
        fclose($fileHandle);
    }
    

    注意:BOM不是必须的,现代编辑器大多支持无BOM的UTF-8,加了反而可能导致读取时出现多余字符。

  • 检查打开文件的工具编码
    有时候文件本身是正确的UTF-8,但你用的打开工具(比如Windows自带记事本)默认编码不是UTF-8,就会把é显示成奇怪的转义字符。试试用Netbeans直接打开这个文件(它默认是UTF-8),或者用Notepad++选择编码 -> UTF-8查看,确认是不是工具的锅。

  • 简化操作:用file_put_contents替代fopen/fwrite
    这个函数更简洁,还能避免模式设置错误的问题,示例:

    $content = implode("\n", $你的数组); // 把数组转成按换行分隔的字符串
    $filePath = '你的文件.txt';
    // 仅当文件为空时写入BOM(可选)
    if (!file_exists($filePath) || filesize($filePath) === 0) {
        file_put_contents($filePath, "\xEF\xBB\xBF");
    }
    file_put_contents($filePath, $content, FILE_APPEND | LOCK_EX);
    

最后再提一句:Netbeans默认是UTF-8编码,你的代码文件本身没问题,重点放在写入时的文件模式和编码处理上,以及后续查看文件的工具设置就好。

内容的提问来源于stack exchange,提问作者Galivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:54:54