gpt4 book ai didi

PHP,str_pad unicode 问题

转载 作者:可可西里 更新时间:2023-10-31 22:08:35 28 4
gpt4 key购买 nike

我只是想将 $str 固定为 5 个字符,但做不到。

$str = "nü";
echo str_pad($str, 5, "ü"); // give nüü

我知道这是一个 unicode 问题并进行了很多搜索,但没有成功。我尝试了诸如;

echo str_pad($str, 4 + mb_strlen($s), $s);
echo str_pad($str, 5 + mb_strlen($s), $s);

我也试过这个http://www.php.net/manual/de/function.str-pad.php#89754看到这个https://stackoverflow.com/a/11871948/362780 .

有这方面的经验吗?

谢谢。

最佳答案

您需要一个多字节版本的 str_pad(),如下所示。它的灵感来自 source code of str_pad() .

function mb_str_pad($input, $pad_length, $pad_string = ' ', $pad_type = STR_PAD_RIGHT, $encoding = 'UTF-8')
{
$input_length = mb_strlen($input, $encoding);
$pad_string_length = mb_strlen($pad_string, $encoding);

if ($pad_length <= 0 || ($pad_length - $input_length) <= 0) {
return $input;
}

$num_pad_chars = $pad_length - $input_length;

switch ($pad_type) {
case STR_PAD_RIGHT:
$left_pad = 0;
$right_pad = $num_pad_chars;
break;

case STR_PAD_LEFT:
$left_pad = $num_pad_chars;
$right_pad = 0;
break;

case STR_PAD_BOTH:
$left_pad = floor($num_pad_chars / 2);
$right_pad = $num_pad_chars - $left_pad;
break;
}

$result = '';
for ($i = 0; $i < $left_pad; ++$i) {
$result .= mb_substr($pad_string, $i % $pad_string_length, 1, $encoding);
}
$result .= $input;
for ($i = 0; $i < $right_pad; ++$i) {
$result .= mb_substr($pad_string, $i % $pad_string_length, 1, $encoding);
}

return $result;
}


$str = "nü";
$pad = "ü";

echo mb_str_pad($str, 5, $pad);

关于PHP,str_pad unicode 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14773072/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com