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数据的方法要好得多.