php - PHP - 如何在 Windows-1252 中保存文件?
问题描述
我在一个为 Outlook 自动生成签名的系统上工作。生成 .htm 文件的部分效果很好。但现在我还需要添加 .txt 格式的文件。如果我在不改变编码的情况下使用内容,我所有的重音字符都将转换为不同的值,例如:“é”变为“é”或“ô”变为“ô”。
这个问题显然看起来像是某种编码冲突。我试图通过将文本值输入转换为“Windows-1252”编码来纠正它。
$myText = iconv( mb_detect_encoding( $myText ) , "Windows-1252//TRANSLIT", $myText);
但这并没有改变什么。我也尝试过:
$myText = mb_convert_encoding($myText, "Windows-1252");
它也没有工作。对于这两个测试,我使用 Atom(我的 IDE)检查了文件类型,它将这些文件识别为 UTF-8。但是当我检查终端时,file -I signature.txt
它会以这种编码响应signature.txt: text/plain; charset=iso-8859-1
请注意,如果我在 Atom 中手动将编码更改为 Windows-1252,则字符是正确的。
有没有人遇到过同样的问题?php中是否有另一种方法来指定文件的编码?
解决方案
我想到了。要使用的代码是(正如@Powerlord 所指出的):
$monTexteTXT = mb_convert_encoding($monTexteTXT, "Windows-1252", "UTF-8");
当我第一次尝试这个解决方案时,我有一个误报,因为当我打开文件时,字符似乎被破坏了。但是用outlook打开后就没事了。
推荐阅读
- c# - 如何序列化/反序列化客户端库的 dotnet 核心异常?
- node.js - 想要让 Raspberry Pi 上的 Node Red 检测到来自 Arduino 的数据并对其做出反应,但不确定该怎么做?
- sql - 如何打印表格中缺失的行
- flutter - Flutter 自定义持久化底部导航栏
- python - 如何在 tkinter 中创建强制窗口
- php - Wordpress 目录位置问题
- python - 为什么 Opencv 提供 RGB 而不是 BGR?
- apache-spark - 添加列后连接配置单元表会中断火花读取
- react-native - 在 React Native 中编写导航的最佳方法是什么,其中一些屏幕可以通过登录和未登录用户看到
- c# - 如何增加 .NET 中的 TLS 握手大小?