Php 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编码并输出日本字母 但我的问

我一直在读UTF-8,但我需要一些建议

例如。我有一个表单,用户可以在其中输入文本。这可以是英语,也可以是日语。下一页,输出文本并将其存储在数据库中

一切都被(或应该)定义为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')ß
    配合得很好,但与
    م
    配合时,他总是返回8。除非我做错了什么事@Nicolas.-代码
    echomb_strlen('م')在我的测试中返回2。您是否以UTF-8格式(文件格式而非编码声明)存储PHP文件?@martinstoeckli否我通过表单编写它。它在下一页变成Unicode%u0645,因此我使用上面的代码将其转换为UTF-8(preg_replace)。这可能就是问题所在。但如果我在更换preg_后打印出来,它就是م@Nicolas。-如果页面和数据库使用UTF-8,则不需要正则表达式。我试图指出在这个小问题上的必要步骤。