通过密钥[$ i]访问php多字节字符串

时间:2011-08-10 10:21:07

标签: php

有一个字符串$string = "öşğüçı";注意最后一个不是我的字符串 当我想通过echo $string[0]打印第一个字符时它什么都不打印..我知道它们是多字节的...虽然打印第一个字符可以通过

完成

echo $string[0].$string[1]但这不是我想要的......问题是

我怎样才能使提到的问题只是以下面的方式进行编程

for($i = 0; $i < sizeof($string); $i++)
   echo $string[$i] . " ";

它会打印以下内容

ö ş ğ ü ç ı

php的大师请帮忙...

4 个答案:

答案 0 :(得分:4)

将字符串拆分为字符

$string = "öşğüçı";
preg_match_all('/./u', $string, $m);
$chars = $m[0];

注意正则表达式中的“u”标志

答案 1 :(得分:2)

<?php
// inform the browser you are sending text encoded with utf-8
header("Content-type: text/plain; charset=utf-8");

// if you're using a literal string make sure the file 
// is saved using utf-8 as encoding
// or if you're getting it from another source make sure 
// you get it in utf-8
$string = "öşğüçı";

// if you do not have your string in utf-8
// you need to find out the actual encoding
// and use "iconv" to convert it to utf-8

// process the string using the mb_* functions 
// knowing that it is encoded in utf-8 at this point
$encoding = "UTF-8";
for($i = 0; $i < mb_strlen($string, $encoding); $i++) {
   echo mb_substr($string, $i, 1, $encoding);
}

当然如果你更喜欢另一种编码(但我不明白为什么;也许只是utf-16)你可以用你想要的编码替换上面的每个“utf-8”实例,并相应地阅读和使用


UTF-16输出示例(文件/输入以UTF-8编码)

<?php
header("Content-type: text/plain; charset=utf-16");
$string = "öşğüçı";
$string = iconv("UTF-8", "UTF-16", $string);
$encoding = "UTF-16";
for($i = 0; $i < mb_strlen($string, $encoding); $i++) {
   echo mb_substr($string, $i, 1, $encoding);
}

答案 2 :(得分:1)

在PHP中,您无法以这种方式处理多字节字符串。如果它是一个固定长度的编码,每个字符占用两个字节,你可以一次只取两个字节。如果它是像UTF-8这样的可变长度编码,则需要使用mb_substrmb_strlen

我可以推荐What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text,这可以更详细地解释这一点。

答案 3 :(得分:0)

使用iconv_substrmb_substr获取字符,iconv_strlenmb_strlen获取字符串大小。