Html 在测试网站时,如何重新创建这些特殊角色?

Html 在测试网站时,如何重新创建这些特殊角色?,html,utf-8,internationalization,Html,Utf 8,Internationalization,我们在英国网站上有一个“联系我们”表格,可以生成电子邮件。一些来自欧洲国家的用户正在输入公司名称,如“Törner”和“Ómicron”,网站正在正确处理这些字符。像“João”这样的名字使用起来很方便 有时,我们会得到一个人的名字,或公司的名字,这似乎很疯狂: 科沃夫™Ãƒâ€ ’ƒÆ’ÃÃ

我们在英国网站上有一个“联系我们”表格,可以生成电子邮件。一些来自欧洲国家的用户正在输入公司名称,如“Törner”和“Ómicron”,网站正在正确处理这些字符。像“João”这样的名字使用起来很方便

有时,我们会得到一个人的名字,或公司的名字,这似乎很疯狂:

科沃夫™Ãƒâ€ ’ƒÆ’ƒÂÂÃ罗巴 纳瓦拉尼

幸运的是,此人进行了第二次询问,而这一次的文本只是:

科沃维罗巴·纳瓦拉尼

谷歌透露在索尔瓦基亚有一个叫科沃夫·罗巴·纳瓦兰的地方。如果我试着把它粘贴到我们的网站上,效果很好。另一个问题来自德国,一个乌姆劳特变成了数百个奇怪的角色。同样,我自己的测试没有问题


我的问题是:如何重新创建似乎将单个字符气球化为486个字符的乱码的输入?一旦我自己能够导致错误,我就可以在代码中找到处理文本不好的地方。我粘贴了最原始、最奇怪的土耳其语、俄语和中文字符,没有任何问题。

当我在PhpMyAdmin中查看文本字段时,有时会得到以下字符串而不是撇号: Ã

字段类型设置为text,排序规则为utf8\u general\u ci

在我的xojo应用程序中,我从MSSQL服务器检索文本,撇号显示为€™. (在SQL manager中,撇号通常出现)。 稍后我将文本存储在MySQL的上述字段中,结果如图所示。看起来像是你的案子

看起来字符转换正在从“到”复合™ 到ÃÚšššŠŠŠŠŠ。
这并不能解释产生这种效果的原因,但它确实给了你一条重现这种效果的途径。

似乎正在发生的事情是,utf8字节被解释为拉丁字符,然后转换为utf8。重复多次

我经常在MySQL的错误配置中看到这种情况发生两次,但从来没有出现过这种情况。以艾伦为例:

’     E28099
’     C3A2 E282AC E284A2
’  C383C2A2C3A2E2809AC2ACC3A2E2809EC2A2
’
在原问题中:

ý        C3BD
ý       C383 C2BD
ý     C383 C692 C382 C2BD
ý C383 C692 C386 E28099 C383 E2809A C382 C2BD
(etc)
(至于到底是什么过程在重复做这种肮脏的事情,我不知道。)

至于撤销契约。以下是使用MySQL撤消一个步骤的示例:

SELECT CONVERT(BINARY(CONVERT('ý' USING latin1)) USING utf8mb4)
                          --> 'ý'
(我没有一个“循环直到完成”的好方法。)

至于为什么有些角色可以,有些角色不行,我看不出模式

ãöÓ
可以吗?但是
ý'
是坏的吗?有趣的是,
ãöÓ
有拉丁文编码,但其他两种没有。(唉,这与有用的模式正好相反。)


Magnus-是否如Allan所建议的那样,字符串被反复提取和存储?

@MagnusSmith从字段获取测试时,您可能希望尝试直接定义编码


请记住,Xojo中的字符串不一定定义了编码。您可以使用或对其进行测试,然后分别使用或对其进行转换或定义。

这通常不会发生,除非您正在执行某些在某些情况下可能会出错的时髦字符处理。据我所知,没有一个标准的过程可能会导致这种奇怪的结果。没有做任何时髦的处理。奇怪的是,各种各样的口音、元音和非英语字母可以完好无损地保存下来……但有一两个客户能够输入超出此范围的内容,这太疯狂了。我无法通过escapeHTML和编码来解决。我也需要解决方案。谢谢回复。我看不出这是如何循环的,当我的网页只抓取类型化的值,并将它们传递给SQL存储过程以保存一次时。但你给了我很多很好的线索让我进一步研究@MagnusSmith-创建存储过程时,将捕获当前字符集。请使用
showcreateprocedure…
检查它,如果它显示“latin1”,这可能是一个强有力的线索。