我在一个字符串中有5个希腊字符。在php中使用substr之后输出类似于α 。它应该是αβγ。关于编码的任何建议? 我试过了
header('Content-type:text / html; charset = utf-8');
没有结果。
<?php
$string = "αβγδε";
$thedoc = substr($string, 0, 3);
echo $thedoc."<br/>";
?>
答案 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 />';