如何迭代包含西里尔字符的字符串?

时间:2018-08-25 06:23:20

标签: php string substring cyrillic multibyte

我正在尝试迭代包含西里尔字母的字符串并执行串联操作,但是我的代码返回的是错误的文本。

代码如下:

$str = "слово";
$temp = "";
for ($i = 0; $i < strlen($str); $i++) {
    $temp.=$str[$i];
    echo $temp . '<br>';
}
echo $temp;

输出:

�<br>с<br>с�<br>сл<br>сл�<br>сло<br>сло�<br>слов<br>слов�<br>слово<br>слово

所需的输出:

с<br>сл<br>сло<br>слов<br>слово<br>слово

我也尝试使用mb_strlen()代替strlen(),但这也不起作用。

1 个答案:

答案 0 :(得分:0)

您不能简单地使用偏移号来访问多字节字符。

您需要使用 <?php $user = $this->admin_model->getData('user'); ?> <select class="form-control" name="user" id="user"> <option value="">Select User to Assign</option> <?php foreach ($user as $row): ?> <option value="<?php echo $row->id; ?>"><?php echo $row->user_name</option> <?php endforeach; ?> </select> mb_strlen()来隔离所需的子字符串。

*注意:缓存mb_substr()是个好主意。 $len函数很昂贵;最好最大程度地减少在脚本中调用它们的次数。

代码:(Demo

mb_

输出:

$str = "слово";
$temp = "";
for ($i = 0, $len = mb_strlen($str); $i < $len; $i++) {
    $temp .= mb_substr($str, $i, 1);
    echo $temp . '<br>';
}
echo $temp;

根据您实际项目的需求,这是一种不需要с<br>сл<br>сло<br>слов<br>слово<br>слово 变量的替代方法:

$temp