substr with Greek characters

5 php character-encoding substr

我在一个字符串中有5个希腊字符.在php中使用substr之后输出类似于α .它应该是αβγ.关于编码的任何建议?我试过了

header('Content-type:text/html; charset = utf-8');

没有结果.

         <?php
          $string = "?????";
          $thedoc = substr($string, 0, 3); 
          echo $thedoc."<br/>";
        ?>
Run Code Online (Sandbox Code Playgroud)

Juk*_*ela 16

$thedoc = mb_substr($string, 0, 3, 'UTF-8'); 
Run Code Online (Sandbox Code Playgroud)

您需要使用mb_substr而不是substr,并且需要将此上下文中使用的PHP的内部编码设置为UTF-8.

substr函数基于一个简单的字符模型,其中每个字符是一个8位字节.使用just substr($string, 0, 3),您将获得字符串的前3个字节.UTF-8编码的希腊字母占用两个字节,因此您得到alpha(α)和"half"的一半,即其内部表示中的第一个字节,它不是有效的UTF-8数据,因此使用"替换"显示字符" (字符级数据错误的指示).

在实践中,您也可以使用substr($string, 0, 6),获取前6个字节(3个字符),但这是一种丑陋的方式,并依赖于文本特定的字母,每个字母在UTF-8中占用2个字节,因此它不会工作,例如混合拉丁文和希腊文.使用可以处理任何UTF-8数据的方法要好得多.