substr with Greek characters

时间:2012-06-27 11:19:50

标签: 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/>";
        ?>

4 个答案:

答案 0 :(得分:15)

$thedoc = mb_substr($string, 0, 3, 'UTF-8'); 

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

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

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

答案 1 :(得分:2)

请尝试此操作,您将解决问题。

iconv_substr($ string,0,1,'utf-8');

答案 2 :(得分:1)

当您在PHP代码中写出字符时,请务必检查PHP文件本身的编码。 要在浏览器中显示UTF-8字符,您还应该在内容中包含内容类型META标记,如下所示:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

答案 3 :(得分:0)

您也可以尝试强制该值为utf8字符串

echo utf8_encode( $thedoc ) . '<br />';