我遇到了一个相当奇怪的问题: 我正在使用一个数据库(我没有设计),这个数据库是多语言的,即有英语、西类牙语、俄语、越南语等标题。
据我所知,带有“ñ”、“á”、“é”、“ë”类型字符的标题已以这种方式存储在数据库中:“ñ_”,所以我知道在html中显示这些字符如何编写它们是我的 PHP 代码中的“ñ
”,在调用这些字符时(不使用任何类型的转换),我会发生以下情况:
Title in database: Señ_ora // Señora
Title obtained by PHP: Señ_ora // Señora
我尝试使用 utf_decode 和 html_entities_decode 但这不起作用。 我想这样做,使用 str_replace 删除标题“Señ_ora”中的“_”,但我得到:“Señora”
最佳答案
characters of type "ñ", "á", "é", "ë", have been stored in the database in this way: "ñ_"
这很奇怪。
首先,确保您的数据库确实包含这些 _
字符,并确保您没有看到某种正在呈现的替换字符。无论您使用什么程序来显示数据,都可能有一些字符集选项设置不正确。
您可能会说SELECT field, HEX(field) FROM table WHERE field LIKE '%' ORDER BY CHAR_LENGTH(field) LIMIT 10
来查找一些相对较短的示例。然后仔细检查十六进制输出,查找 3B
(十六进制表示 ;
)和 5F
(十六进制表示 _
)。
例如,在我的 UTF8 设置中,SELECT HEX('Señora'), HEX('Señ_ora')
给出这两个字符串
5365266E74696C64653B6F7261
xx
5365266E74696C64655F6F7261
看出区别了吗?
如果 _
字符确实存在于您的数据中,则您需要进行一些网络 spy 事件。您是否可以联系到设置此内容的人,以便您可以询问一下?如果是这样,就这样做。这将为您节省一些逆向工程时间。
如果您必须在没有帮助的情况下解决此问题,您可以尝试像这样使用 php
$my_data = str_replace('_',';', $my_data);
这应该使实体化字符的格式正确。 但是,它还会将独立的 _
字符更改为 ;
。要解决此问题,您需要数据中所有实体化字符的列表,并且需要单独更改它们。
关于PHP - 来自 Mysql 的拉丁字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46505234/