如何迭代包含西里尔字符的字符串?
How to iterate a string containing cyrillic characters?
我正在尝试迭代包含西里尔字符的字符串并执行连接,但我的代码返回的是损坏的文本。
代码如下:
$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()
但这也没有用。
您不能简单地使用偏移量数字来访问多字节字符。
您需要使用 mb_strlen()
和 mb_substr()
来隔离您想要的子字符串。
*注意:缓存 $len
是个好主意。 mb_
功能很昂贵;最好尽量减少在脚本中调用它们的次数。
代码:(Demo)
$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
变量的替代方案:
$str = "слово";
for ($i = 0, $len = mb_strlen($str); $i < $len; $i++) {
if ($i) echo '<br>';
echo mb_substr($str, 0, $i + 1);
}
// с<br>сл<br>сло<br>слов<br>слово
我正在尝试迭代包含西里尔字符的字符串并执行连接,但我的代码返回的是损坏的文本。
代码如下:
$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()
但这也没有用。
您不能简单地使用偏移量数字来访问多字节字符。
您需要使用 mb_strlen()
和 mb_substr()
来隔离您想要的子字符串。
*注意:缓存 $len
是个好主意。 mb_
功能很昂贵;最好尽量减少在脚本中调用它们的次数。
代码:(Demo)
$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
变量的替代方案:
$str = "слово";
for ($i = 0, $len = mb_strlen($str); $i < $len; $i++) {
if ($i) echo '<br>';
echo mb_substr($str, 0, $i + 1);
}
// с<br>сл<br>сло<br>слов<br>слово