1

preg_replace と e/ 修飾子を使用してこの関数を変更する方法は誰でも知っています。 e/ 修飾子は減価償却されます。

function charset_decode_utf_8 ($string) {
      /* Only do the slow convert if there are 8-bit characters */
    /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */
    if (! preg_match("/[\200-\237]/", $string) and ! preg_match("/[\241-\377]/", $string))
        return $string;

    // decode three byte unicode characters
    $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",
    "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",
     $string);

    // decode two byte unicode characters
    $string = preg_replace("/([\300-\337])([\200-\277])/e",
    "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",
    $string);

return $string;
}
4

1 に答える 1

2
<?php
$string = preg_replace_callback("/([\340-\357])([\200-\277])([\200-\277])/",
    function($arr) {
        $val = (ord($arr[1]) - 224) * 4096
                + (ord($arr[2]) - 128) * 64
                + (ord($arr[3]) - 128);
        return "&#" . $val . ";";
    }, $string);


$string = preg_replace_callback("/([\300-\337])([\200-\277])/",
    function($arr)
    {
        $val = (ord($arr[1]) - 192) * 64 + ord($arr[2]) - 128;
        return "&#" . $val . ";";
    }, $string);
于 2012-10-15T12:25:12.580 に答える