其实我的预期结果是 - 零0 一个1 两个২ 三3 四.4 五.5 六.6 七.7 八点8 9月9日
但我得到了 -
零&#ý9;ý9; 37; 6;ý9;ý9; 37;ý9; 38 ;;
one&#ý9;ý9; 37; 6;ý9;ý9; 37;ý9;;
两个ý9;ý9; 37; 6;
三ý9; 37;
四ý9; 38;
五ý9;
六6
七7
八8
九点9
请求帮助我。
代码:
$n=array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$x=array("০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯");
$on='O 0
one 1
two 2
three 3
four 4
five 5
six 6
seven 7
eight 8
nine 9';
$converted = nl2br(str_replace($n, $x, $on));
echo $converted;
答案 0 :(得分:1)
str_replace
不是编码安全的。您有多字节str_replace
(mb_str_replace
)here的实现:
function mb_str_replace($needle, $replacement, $haystack)
{
$needle_len = mb_strlen($needle);
$replacement_len = mb_strlen($replacement);
$pos = mb_strpos($haystack, $needle);
while ($pos !== false)
{
$haystack = mb_substr($haystack, 0, $pos) . $replacement
. mb_substr($haystack, $pos + $needle_len);
$pos = mb_strpos($haystack, $needle, $pos + $replacement_len);
}
return $haystack;
}
编辑: Oups,您的字符是HTML编码的,而不是PHP编码问题。
答案 1 :(得分:1)
您要为此目的使用的功能是strtr()。
$x = array("০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯");
$converted = nl2br(strtr($on, $x));
echo $converted;
产生以下内容:
<0> O 0
一个1
两个২
三个 3
四4
五5
六6七七7八八8九9
str_replace()在这里不起作用,因为数组中的后面条目正在替换先前条目完成的替换中的字符。
P.S。该阵列确实应该是一个关联数组(即“0”=&gt;“0”)。我懒得做出改变,只是使用整数键恰好是正确的事实。