2

实际上我的预期结果是 - 零০一১二২三৩四৪五৫六৬七৭八৮九৯

但我得到 - 零 &#ý৯;ý৯;3৭;৬;ý৯;ý৯;3৭;ý৯;3৮;; 一个 &#ý৯;ý৯;3৭;৬;ý৯;ý৯;3৭;ý৯;;
两个 ý৯;ý৯;3৭;৬;
三个 ý৯;3৭;
四个 ý৯;3৮;
五个 ý৯;
六৬<br />七৭<br />八৮<br />九৯请帮帮我。编码:

$n=array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');

 $x=array("&#2534;", "&#2535;", "&#2536;", "&#2537;", "&#2538;", "&#2539;", "&#2540;", "&#2541;", "&#2542;", "&#2543;");

$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;
4

2 回答 2

1

您要用于此目的的函数是strtr()

$x = array("&#2534;", "&#2535;", "&#2536;", "&#2537;", "&#2538;", "&#2539;", "&#2540;", "&#2541;", "&#2542;", "&#2543;");
$converted = nl2br(strtr($on, $x));
echo $converted;

产生以下内容:

O ০
一 ১
二 ২
三 ৩
四 ৪
五 ৫
六 ৬
七 ৭
八 ৮
九 ৯

str_replace() 在这里不起作用,因为数组中的后一个条目正在替换早期条目完成的替换中的字符。

PS 该数组确实应该是一个关联数组(即“0”=>“০”)。我懒得做出改变,只是利用整数键恰好是正确的事实。

于 2013-02-10T12:27:11.410 回答
1

str_replace不是编码安全的。你在这里有一个多字节str_replacemb_str_replace)的实现:

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;
}

编辑:哎呀,你的字符是 HTML 编码的,而不是 PHP 编码问题。

于 2013-02-10T12:14:39.093 回答