编辑:您的屏幕截图显示下面的诊断可能是正确的。
怎么做:尝试iconv()
在您的 PHP Web 应用程序中使用。您将不得不猜测或找出您的 Windows 应用程序使用的排序规则/代码页。
然后这样的事情可能会起作用:
$string_decoded = iconv("windows-1256", "utf-8", $string);
您可能需要进行试验才能使其正常工作。另外,我认为您需要强制您的数据库连接使用 latin1 而不是 UTF-8!
如果您问我,这不是您的网络应用程序的良好基础。您必须一直将数据转换为损坏的格式。您可能不得不破坏与您的应用程序的兼容性,或者编写一个导入工具。
latin1 字符集不包括波斯字符。collation-charts.org 上的证明
我对为什么您的 Delphi 程序能够在 latin1 数据库中存储阿拉伯字符的唯一解释是,它可能滥用latin1 数据库来存储 latin1 未涵盖的数据,例如Windows-1256 阿拉伯语。因此程序将存储每个阿拉伯字符的原始字节,而实际上这些字节被latin1 字符集中的其他拉丁字符占用。但只要只是 Delphi 程序存储和获取数据,就没有人注意到。
如果我在这方面是正确的——这是我能看到你所描述的事情如何发生的唯一方法——只要只涉及以相同方式执行此操作的应用程序,这种方式确实是错误的。
您应该能够通过查看来自“中性”数据库工具(如 phpMyAdmin 或 HeidiSQL)的数据来确认是否属于这种情况。如果您在那里看到垃圾而不是阿拉伯/波斯字符,我可能是对的。
至于如何使您的 PHP Web 应用程序与您的 Delphi 应用程序使用相同的数据库 - 老实说,我不确定该怎么做。据我所知,没有办法强制 mySQL 使用一种编码而不是另一种。在将数据提取到 Web 应用程序之前,您必须手动“重新编码”数据。这很可能是一个痛苦的过程。
但首先,试着找出到底发生了什么。