代码之家  ›  专栏  ›  技术社区  ›  Keith Palmer Jr.

php utf-8问题-如果我用php创建一个字符串…它是utf-8吗?

  •  3
  • Keith Palmer Jr.  · 技术社区  · 15 年前

    在PHP中,如果我创建这样的字符串:

    $str = "bla bla here is my string";
    

    然后我可以使用mbstring函数以utf8的形式对该字符串进行操作吗?

    // Will this work?
    $str = mb_strlen($str); 
    

    另外,如果我有另一根弦, 知道 UTF-8(比如说它是一个已发布的表单值,或者数据库中的一个UTF-8字符串)是否可以将这两个值连接起来而不会有任何问题?

    // What about this, will this work? 
    $str = $str . $utf8_string_from_database;
    
    3 回复  |  直到 15 年前
        1
  •  10
  •   chazomaticus    15 年前

    第一个问题:这取决于字符串中的具体内容。

    在php中(无论如何,最多可达php5),字符串只是字节序列。没有与它们相关联的隐含或显式字符集;这是程序员必须跟踪的。因此,如果只在引号之间放置有效的utf-8字节(如果文件本身编码为utf-8,则相当容易),那么字符串将是utf-8,并且可以安全地对其使用mb_strlen()。

    另外,如果您使用的是mbstring函数,那么您需要显式地告诉它您的字符串是什么字符集,或者使用 mbstring.internal_encoding 或者作为任何mbstring函数的最后一个参数。

    第二个问题:是的,有警告。

    两个独立有效的UTF-8字符串可以安全地按字节连接(就像与PHP的 . 并且仍然是有效的UTF-8。但是,如果不自己做一些工作,就永远无法确定发布的字符串是有效的UTF-8。如果小心地设置连接字符集,数据库字符串会更容易一些,因为大多数DBMS都会为您进行任何转换。

        2
  •  3
  •   Ilya Birman    15 年前

    如果源代码是UTF-8,那么字符串是UTF-8,如果不是,则不是。由于示例字符串仅为英语,因此它是有效的UTF-8。

    PHP本身并不了解字符集。如果您将内容传递给mb*函数,它会将其视为一个utf-8字符串。

    不管怎样,串联都必须工作良好,如果我理解UTF-8,请确保 二者都 字符串是utf-8,否则将得到 奇怪的 结果是字符串。

        3
  •  2
  •   Peter Bailey    15 年前

    在执行任何一个命令之前,请确保将默认的\u charset指令设置为utf-8。

    直接修改php.ini或在运行时使用

    <?php
    
    ini_set( 'default_charset', 'UTF-8' );