如果字符串中包含çøas或其他特殊字符,怎么会返回为null呢?不仅保留特殊字符,而且将整个字符串(值)作为null返回...
编辑:
class JSON {
static function encode($arr, $utf8_encode=false){
$arr = self::parse_int($arr);
if($utf8_encode){
array_walk_recursive($arr, array(self => 'utf8_enc'));
}
return $arr ? json_encode($arr):'{}';
}
static function decode($str){
return json_decode($str, true);
}
function utf8_enc(&$value, $key){
$value = utf8_encode($value);
}
function parse_int($arr){
foreach($arr as $key => $value){
if(is_array($value)){
$arr[$key] = self::parse_int($value);
}
else{
if(is_numeric($value)){
settype($value, 'float');
}
$arr[$key] = $value;
}
}
return $arr;
}
}但是我得到了这个错误:
Warning: array_walk_recursive() expects parameter 2 to be a valid callback, array must have exactly two members在这一行中:
array_walk_recursive($arr, array(self => 'utf8_enc'));如何在当前对象中定义函数?
发布于 2011-04-25 22:28:46
所有发送到json_encode函数的字符串都应该是UTF8编码的。没有例外。您可以使用iconv或utf8_encode来帮助您。
发布于 2011-04-25 22:25:59
json_encode requires输入的字符串是用UTF-8编码的。如果调用它并以任何单字节编码传递此类字符,则返回值为null。
发布于 2011-04-25 23:02:50
嗯,我上了你的课,改进了一点。没有理由将内部类方法声明为静态方法。您的encode和decode方法可以是静态的,但parse_int和utf8_enc可以是简单的私有方法。
<?php
class JSON {
public function encode($arr, $utf8_encode = false) {
$arr = $this->parse_int($arr);
if ($utf8_encode) {
array_walk_recursive($arr, array($this, 'utf8_enc'));
}
return $arr ? json_encode($arr) : '{}';
}
public function decode($str) {
return json_decode($str, true);
}
private function utf8_enc(&$value, $key) {
$value = utf8_encode($value);
}
private function parse_int($arr)
{
foreach ($arr as $key => $value) {
if (is_array($value)) {
$arr[$key] = $this->parse_int($value);
} else {
if (is_numeric($value)) {
settype($value, 'float');
}
$arr[$key] = $value;
}
}
return $arr;
}
}
$json = new JSON;
echo $json->encode(array('áé$@(*&dásásd?eq'), true);https://stackoverflow.com/questions/5779309
复制相似问题