5

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

header ('内容类型: text/html; charset=utf-8');

没有结果。

         <?php
          $string = "αβγδε";
          $thedoc = substr($string, 0, 3); 
          echo $thedoc."<br/>";
        ?>
4

4 回答 4

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

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

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

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

于 2012-06-27T12:07:34.083 回答
3

请试试这个,你会解决你的问题。

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

于 2013-10-11T08:45:40.110 回答
1

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

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
于 2012-06-27T11:28:24.123 回答
0

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

echo utf8_encode( $thedoc ) . '<br />';
于 2012-06-27T11:29:45.437 回答