我正在尝试将字符集从latin1更改为utf8
问题:密码不适用于法语字符。密码适用于特殊字符(如引号、括号、美元符号等)。如果我将代码部分中的字符集转换回latin1,则可以使用法语字符登录,但不能使用utf8登录。
到目前为止我做了什么:
请建议:
我怀疑这可能是因为如果我将代码部分转换为latin1,密码工作正常。因此,我认为代码和数据库都是latin1,因此它可以识别特殊字符,但是当我将其更改为utf8时,它无法将特殊的法语字母解释为最初以latin1形式存储的字符。
PHP和MySQL都是最新版本。
由于我的答复很长,所以我决定在这里加上:
散列函数非常复杂,它使用的是md5、encode64和crypt函数的组合。我注意到拉丁文和unicode产生的pwd是不同的。这就是原因,我怀疑以前使用latin1生成的pwd可以匹配pwd,而不是转换后的unicode。同样,这种情况只发生在法语字母上,而不是0到127的ascii范围内。我不知道如何处理现有用户可以成功登录的情况,将char设置为unicode-8。我不能使用iconv(),因为我无法区分密码是使用latin1创建的还是使用unicode8创建的。除了更改数据库之外,我是否也需要更改数据,以及如何更改?如果我的想法是正确的,那么数据转换到unicode8可能也照顾到法语字符?
发布于 2013-11-22 22:54:13
如果需要将char从某些Unicode转换为另一个char,则可以使用此函数。
iconv()https://stackoverflow.com/questions/20155649
复制相似问题