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