最後把飯盆舔的賊乾淨
是 GBk 编码的,不能被 json_encode 函数所接受(其实转成 utf-8 编码的就可以了)
你就用自己的函数进行处理?
但是为什么要做转义处理呢?不理解至于 賊 变成了 賊\ 原因很简单
賊 的内码是 d95c
\ 的内码是 5c
你做了转义处理,自然转义符就变成 \\ 了
前一个 \ 和 賊 的第一字节结合成 賊,于是就成了现在这个样子了
是 GBk 编码的,不能被 json_encode 函数所接受(其实转成 utf-8 编码的就可以了)
你就用自己的函数进行处理?
但是为什么要做转义处理呢?不理解至于 賊 变成了 賊\ 原因很简单
賊 的内码是 d95c
\ 的内码是 5c
你做了转义处理,自然转义符就变成 \\ 了
前一个 \ 和 賊 的第一字节结合成 賊,于是就成了现在这个样子了
解决方案 »
- PHP怎样在不足两位数前加 0 补足两位数呢
- svn自动更新
- 一个简单的问题:如何让程序暂停2秒再往下运行?
- fopen错误问题!failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in
- 新手遇到奇怪的问题
- 找PHP程序员,在广州,写两个小程序!酬劳面谈!
- 上传图片
- Notice: Undefined index: wdbadminid in e:\program files\apache group\apache\htdocs\wdb\adminglobal.php on line 8 请问这个错误是
- 英文译中文,.怎么办?
- 关于网页内容抓取问题的请教.
- PHP变量传递问题。
- $_SERVER['REMOTE_ADDR']返回值为::1怎么改成ipv4的ip地址
function encode($arg, $force = true)
{
static $_force;
if (is_null($_force))
{
$_force = $force;
} if ($_force && EC_CHARSET == 'utf-8' && function_exists('json_encode'))
{
return json_encode($arg);
} $returnValue = '';
$c = '';
$i = '';
$l = '';
$s = '';
$v = '';
$numeric = true; switch (gettype($arg))
{
case 'array':
foreach ($arg AS $i => $v)
{
if (!is_numeric($i))
{
$numeric = false;
break;
}
} if ($numeric)
{
foreach ($arg AS $i => $v)
{
if (strlen($s) > 0)
{
$s .= ',';
}
$s .= $this->encode($arg[$i]);
} $returnValue = '[' . $s . ']';
}
else
{
foreach ($arg AS $i => $v)
{
if (strlen($s) > 0)
{
$s .= ',';
}
$s .= $this->encode($i) . ':' . $this->encode($arg[$i]);
} $returnValue = '{' . $s . '}';
}
break; case 'object':
foreach (get_object_vars($arg) AS $i => $v)
{
$v = $this->encode($v); if (strlen($s) > 0)
{
$s .= ',';
}
$s .= $this->encode($i) . ':' . $v;
} $returnValue = '{' . $s . '}';
break; case 'integer':
case 'double':
$returnValue = is_numeric($arg) ? (string) $arg : 'null';
break; case 'string':
$returnValue = '"' . strtr($arg, array(
"\r" => '\\r', "\n" => '\\n', "\t" => '\\t', "\b" => '\\b',
"\f" => '\\f', '\\' => '', '"' => '\"',
"\x00" => '\u0000', "\x01" => '\u0001', "\x02" => '\u0002', "\x03" => '\u0003',
"\x04" => '\u0004', "\x05" => '\u0005', "\x06" => '\u0006', "\x07" => '\u0007',
"\x08" => '\b', "\x0b" => '\u000b', "\x0c" => '\f', "\x0e" => '\u000e',
"\x0f" => '\u000f', "\x10" => '\u0010', "\x11" => '\u0011', "\x12" => '\u0012',
"\x13" => '\u0013', "\x14" => '\u0014', "\x15" => '\u0015', "\x16" => '\u0016',
"\x17" => '\u0017', "\x18" => '\u0018', "\x19" => '\u0019', "\x1a" => '\u001a',
"\x1b" => '\u001b', "\x1c" => '\u001c', "\x1d" => '\u001d', "\x1e" => '\u001e',
"\x1f" => '\u001f'
)) . '"';
break; case 'boolean':
$returnValue = $arg?'true':'false';
break; default:
$returnValue = 'null';
} return $returnValue;
}
这个位置的代码 以前是
'\\' => '\\\\',但是賊会导致错误。所以我直接改成空了
$str=iconv("GBK", "UTF-8", $str);
你也可以读出来转码,嫌麻烦的话。给你一个类class GBK {
public static function unserialize($s) {
$s = preg_replace_callback('/s:\d+:"([^"]+)";/',
function($r) {
$n = strlen($r[1]);
return "s:$n:\"$r[1]\";";
},
$s
);
return unserialize($s);
} public static function json_encode($s, $charset='gbk') {
if($charset == 'utf-8') return json_encode($s);
$s = serialize($s);
$s = gbk::unserialize(iconv($charset, 'utf-8', $s));
return preg_replace_callback('/[\\\]u(\w{4})/',
function($r) use ($charset) {
return iconv('ucs-2', $charset, pack('H4', $r[1]));
},
json_encode($s)
);
} public static function json_decode($s, $assoc=0, $charset='gbk') {
if(json_encode(json_decode($s)) != $s) $s = iconv('gbk', 'utf-8', $s);
$t = json_decode($s, $assoc);
if($charset == 'uft-8') return $t;
return gbk::unserialize(iconv('utf-8', $charset, serialize($t)));
} public static function preg_replace($pattern, $replacement, $subject, $limit=-1) {
$pattern = iconv('gbk', 'utf-8', $pattern);
$replacement = iconv('gbk', 'utf-8', $replacement);
$subject = iconv('gbk', 'utf-8', $subject);
$t = preg_replace($pattern, $replacement, $subject, $limit=-1);
return iconv('utf-8', 'gbk', $t);
}
public static function preg_match($pattern, $subject, &$matches=array(), $flags=0) {
self::toutf8($pattern);
self::toutf8($subject);
$n = preg_match($pattern, $subject, $matches, $flags);
if($matches) self::togbk($matches);
return $n;
}
static function toutf8(&$str) {
if(is_array($str)) foreach($str as &$s) return self::toutf8($s);
$str = iconv('gbk', 'utf-8', $str);
}
static function togbk(&$str) {
if(is_array($str)) foreach($str as &$s) return self::togbk($s);
$str = iconv('utf-8', 'gbk', $str);
}
}
简直 无法形容对你的感谢了。 强悍 热心 迅速我引用了你的类。问题已经解决。
之前用的自定义类。还出现了个问题。“還有許多水上運動的俱樂部” 这句话 直接导致了乱码
这里的引号会导致 解析过不去 成了false
我那个写法的本意是能处理这样的数组:
array( '中文' => '很多很多内容')
echo gbk::json_encode(array( '中文' => '很多很多内容'));{"中文":"很多很多内容"}
然后再用你的方法。还是false,但实质符合JSON格式了
header("Content-Type: text/html; charset=utf-8");
echo gbk::json_encode(array( '中文' => '玩了一会,小熊说"你想爸爸和妈妈吗“,我说“想,爸爸妈妈説休息天还要带我出去玩呢”,“你多好呀,我连自己的爸妈是谁再哪都不知道",说完小熊就呜呜的哭了起来,我见状一下抱住了小熊,劝他不要哭了,“以后我天天陪伴着你和你玩”。'));
?>编码选保存utf-8,然后运行,还报错?
public static function unserialize($s) {
$s = preg_replace_callback('/s:\d+:"([^"]+)";/',
改成
public static function unserialize($s) {
$s = preg_replace_callback('/s:\d+:"(.+?)";/',就可以了
【配文】+圈儿当上了治安协管员[i=s] 本帖最后由 我爱小丫 于 2014-5-6 02:59 编辑 [/i][attach]4590100[/attach]
画外音:圈儿自从上次举报了打陀螺的成名之后,就被当地的市民一致推举为“优秀荣誉市民”。很快又被当地的派出所聘为“治安协管员”。这不,新的一天,圈儿又开始了每天例行的巡逻了。改了后。文本是这个。还是false
$s = preg_replace_callback('/s:\d+:"(.+?)";/s',