我正在开发一个土耳其网站,该网站在MySQL数据库中存储了许多格式错误的土耳其语字符,例如:
- ş as þ
- ı as ý
- ğ as ð
- Ý as İ
我无法更改数据库中的数据,因为数据库每天更新,新数据将再次包含格式错误的字符。所以我的想法是改变PHP中的数据而不是更改数据库中的数据。我尝试了一些步骤:
Turkish characters are not displayed correctly
Fix Turkish Charset Issue Html / PHP (iconv?)
PHP Turkish Language displaying issue
PHP MYSQL encoding issue ( Turkish Characters )
我正在使用GitHub上的PHP-MySQLi-Database-Class和utf8作为字符集。
我甚至尝试用str_replace替换格式错误的字符,例如:
$newString = str_replace ( chr ( 253 ), "ı", $newString );
我的问题是,如何在不更改数据库中的字符的情况下解决问题?有没有最佳做法?这是替换角色的好方法吗?
修改 通过使用
解决了它<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
答案 0 :(得分:0)
两种解决方案都很好
PHP MYSQL encoding issue ( Turkish Characters )
PHP Turkish Language displaying issue
您也可以在phpMyAdmin上设置配置
操作&gt;表格选项&gt;整理&gt;选择utf8_general_ci
如果您创建表已经编辑了整理结构
答案 1 :(得分:0)
SELECT CONVERT(CONVERT(UNHEX('d0dddef0fdfe') USING ...) USING utf8);
latin5 / iso-8859-1
显示ĞİŞğış
latin1 / iso-8859-9
显示ÐÝÞðýþ
你混淆了两个相似的编码;请参阅https://en.wikipedia.org/wiki/ISO/IEC_8859-9中的第一段。
“整理”仅用于排序。但首先您需要将CHARACTER SET
更改为latin5。然后将排序规则更改为latin5_turkish_ci。 (由于这是latin5的默认设置,因此无需采取任何措施。)
这个可能足以在MySQL中进行更改:编辑3
NO, this is probably wring -- ALTER TABLE tbl CONVERT TO CHARACTER SET latin5;
在看到更多问题之后,这个“两步ALTER”可能是正确的:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET latin5 ...;
为每张桌子做这件事。请务必先在数据副本上对此进行测试。
当{em>字节正确时,2-step ALTER非常有用,但CHARACTER SET
不正确。
CONVERT TO
,但您需要不同的编码(和CHARACTER SET
)。请参阅Case 5。
修改1
E7
和FD
以及ç
和ý
的cp1250,dec8,latin1和latin2。 latin5中的FD
是ı
。我的结论是您的编码是latin1
,而不是latin5
。
你说你不能改变“剧本”。让我们来看看你的局限性。你是否被限制在INSERT
方面?还是SELECT
方?或两者?什么是渲染文本; HTML? MySQL愿意从latin1更改为/从latin5更改并插入/选择(基于一些设置)。和/或你可以欺骗HTML(通过元标记)让它以不同的方式解释字节。请详细说明数据流的详细信息。
修改2
鉴于表中的HEX是E7FD6B6172FD6C6D6173FD6E61
,它应该呈现为çıkarılmasına
,...特别注意第二个字母需要显示为ı
(土耳其无点小) I),而不是ý
(小Y带急性),对吗?
首先尝试
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"/>
这应该会给你'latin5渲染,正如你已经发现的那样。 IANA Reference
至于“最佳实践”,这将涉及更改文本的插入方式。你已经说过这是禁区。
显然,latin5列中存储了latin5个字符。由于latin1不涉及任何检查,您可以毫无困难地插入和检索latin5字符。
这并不符合土耳其整理的愿望。如果有必要,我可以编造一种方式来指定土耳其语对特定语句的排序;请提供样本声明。