Php UTF-8和多语言网站
我一直在读UTF-8,但我需要一些建议 例如。我有一个表单,用户可以在其中输入文本。这可以是英语,也可以是日语。下一页,输出文本并将其存储在数据库中 一切都被(或应该)定义为UTF-8。一切正常,直到我们添加阿拉伯语或日语字母Php UTF-8和多语言网站,php,mysql,utf-8,multilingual,Php,Mysql,Utf 8,Multilingual,我一直在读UTF-8,但我需要一些建议 例如。我有一个表单,用户可以在其中输入文本。这可以是英语,也可以是日语。下一页,输出文本并将其存储在数据库中 一切都被(或应该)定义为UTF-8。一切正常,直到我们添加阿拉伯语或日语字母キ。这些字母变成了(如果我没弄错的话)Unicode格式%u06458 现在的问题是,我知道如何输出这些字母: $x= preg_replace('/%u([0-9A-F]+)/', '&#x$1;', $x); 这将使其UTF-8编码并输出日本字母 但我的问
キ代码>。这些字母变成了(如果我没弄错的话)Unicode格式%u06458
现在的问题是,我知道如何输出这些字母:
$x= preg_replace('/%u([0-9A-F]+)/', '&#x$1;', $x);
这将使其UTF-8编码并输出日本字母
但我的问题是,我想验证长度并将其存储在数据库中。但是一个日语字母已经是8位了,而一个普通的字母是1位
我应该如何检查“文本”长度?比如AA=2
和キキ = 2
这些字母是否总是以8位%u06458
的形式存储在我的数据库中?如果我有一篇有2000个日语单词(2000*8比特)的文本呢?这是英文文本的8倍多
有什么一般的建议吗
所有的mb.
函数都适用于多字节字符
里面有一个mb_strlen
。PHP有专门处理多字节(即Unicode)字符串的函数
检查PHP手册中的和
关于你的问题:
您可以使用以下命令检查文本长度:
您可以将多字节字符直接存储在数据库中,而无需对其进行转码。每个多字节字符占用2个字节
使用PHP多字节函数处理以下字符串:)
是的,要将其存储在数据库中,必须在使用db之前设置字符集。在mysqli中,这将是$db->set_字符集('utf8')例如,mb_strlen与ß
配合得很好,但与م
配合时,他总是返回8。除非我做错了什么事代码>@Nicolas.-代码echomb_strlen('م')代码>在我的测试中返回2。您是否以UTF-8格式(文件格式而非编码声明)存储PHP文件?@martinstoeckli否我通过表单编写它。它在下一页变成Unicode%u0645,因此我使用上面的代码将其转换为UTF-8(preg_replace)。这可能就是问题所在。但如果我在更换preg_后打印出来,它就是م@Nicolas。-如果页面和数据库使用UTF-8,则不需要正则表达式。我试图指出在这个小问题上的必要步骤。