160) { $_Q = ord(substr($chinese, ++$i, 1)); $_P = $_P * 256 + $_Q - 65536; } $result .= ($onlyfirst ? substr(self::_pinyin($_P, $data), 0, 1) : self::_pinyin($_P, $data)); $result .= $delimiter; } if ($delimiter) { $result = rtrim($result, $delimiter); } return preg_replace("/[^a-z0-9_\-]*/i", '', $result); } private static function _pinyin($num, $data) { if ($num > 0 && $num < 160) { return chr($num); } elseif ($num < -20319 || $num > -10247) { return ''; } else { foreach ($data as $k => $v) { if ($v <= $num) { break; } } return $k; } } private static function _u2_utf8_gb($c) { $string = ''; if ($c < 0x80) { $string .= $c; } elseif ($c < 0x800) { $string .= chr(0xC0 | $c >> 6); $string .= chr(0x80 | $c & 0x3F); } elseif ($c < 0x10000) { $string .= chr(0xE0 | $c >> 12); $string .= chr(0x80 | $c >> 6 & 0x3F); $string .= chr(0x80 | $c & 0x3F); } elseif ($c < 0x200000) { $string .= chr(0xF0 | $c >> 18); $string .= chr(0x80 | $c >> 12 & 0x3F); $string .= chr(0x80 | $c >> 6 & 0x3F); $string .= chr(0x80 | $c & 0x3F); } return iconv('UTF-8', 'GB2312//IGNORE', $string); } }