关于json转换php与js数组的一个问题,求解 本帖最后由 a7758521haha 于 2011-05-12 11:16:09 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个好像是js就可以转换htmlencode还是啥的,具体函数自己搜下吧 首先那不是乱码,而是转码,所以你用iconv毫无理由 我在网上搜了一下,大致得到的结论是:1.有些文章是介绍js实现乱码转换是通过jsp实现的,我对jsp不了解2.js实现乱码转换是ajax部分,跟现在的这部分我太相关,还有别的解决方法吗?我上面这段代码有什么问题吗? iconv不就是实现转码的吗?新浪ip得到的内容为"country":"\u4e2d\u56fd","province":"\u6cb3\u5317",转码实现中文显示如果这是不对的,哪里不对呢?如果不对的话,怎么改正呢?提前感谢您的帮助! 给你一个不同的思路<?php@header("Content-type: text/html; charset:GB2312");function getIpPlace(){ $ip = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"); //如果仅仅是用来显示的话将变量名替换一下 //$ip = str_replace('var remote_ip_info ', 'var arr', $ip); // 如果还要二次处理的话那么 $ip = preg_replace('/[^\{]+(\{[^;]+);/i', '\\1', $ip); $data = array(); foreach(json_decode($ip, true) as $k => $v) { if($k == 'country') { $v = iconv('gb2312', 'utf-8', '你在').$v; } $data[$k] = $v; } $ip = 'var arr = ' . json_encode($data); return $ip; }?><script> <?php echo getIpPlace(); ?>; document.write(arr['country']);</script> <script type="text/javascript" src="jquery-1.4.2.min.js"></script><script type="text/javascript"> $(function(){ $.get("http://int.dpool.sina.com.cn/iplookup/iplookup.php","format:js",function(e){$("#data").html(e);});});</script><div id="data"></div>用这种纯前端方式试下。不保证浏览器兼容。 如果仅仅显示的话,我按照如下代码(您提供的)测试,提示错误:<?php@header("Content-type: text/html; charset:GB2312");function getIpPlace(){ $ip = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"); $ip = str_replace('var remote_ip_info','var arr',$ip); //$ip = preg_replace('/[^\{]+(\{[^;]+);/i','\\1',$ip); $data = array(); foreach (json_decode($ip,true) as $k=>$v){ if ($k == 'country'){ $v = iconv('gb2312','utf-8','你在').$v; } $data[$k] = $v; } $ip = 'var arr = '.json_encode($data); return $ip; } ?><script> <?php echo getIpPlace(); ?>; document.write(arr['country']);</script>查看页面的源代码,显示错误信息为:<b>Warning</b>: Invalid argument supplied for foreach() in <b>D:\wamp\www\my_php\sina_ip\sina_ip_csdn.php</b> on line <b>8</b><br />无效参数,不太清楚为什么会出现这样的错误,希望您帮忙解释一下,谢谢! IE8可以显示,firefox4+chrome不能正常显示,虽然对jquery没有了解,还是感谢您分享出你的想法,谢谢! <?php@header("Content-type: text/html; charset:GB2312");function getIpPlace(){ $ip = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js"); $ip = str_replace('var remote_ip_info','var arr',$ip); // 仅仅显示的话,这个就足够了,那个一大坨是处理的相关逻辑 return $ip; } ?><script> <?php echo getIpPlace(); ?>; document.write(arr['country']);</script> 都在胡说八道!这个地址 http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js返回的是 js 语句var remote_ip_info = {"ret":1,"start":"114.106.128.0","end":"114.106.255.255","country":"\u4e2d\u56fd","province":"\u5b89\u5fbd","city":"\u6c60\u5dde","district":"","isp":"\u7535\u4fe1","type":"","desc":""};在页面中可直接引用<script src='http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js'></script><script>alert(remote_ip_info.start);</script>在 php 中引用,需$s = file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js');preg_match('/{.+}/', $s, $r);$p = json_decode($r[0]);print_r($p);stdClass Object( [ret] => 1 [start] => 218.23.185.0 [end] => 218.23.185.255 [country] => 中国 [province] => 安徽 [city] => 池州 [district] => [isp] => 电信 [type] => [desc] => )注意:他返回的 json 是 uft-8 编码的 wamp phpmyadmin 打不开 懂得请进 fsockopen域名(权限)的问题 高分求解lamp配置安装gd前libpng的安装错误 新手apache启动失败怎么解决 php 能不能调用xmlhttp组件 PHP 200人高级 交流群:85758199 已有150多会员 数量有限哦 【请教】请高高手来帮忙解释下这段代码!谢谢了!!100分送上!! 关于超时的问题 php安装成功,但启动电脑时出现警告:php startup 如何在XP下配置PHP运行环境,带MYSQL的,100分求助 从数据库查询出的中文数据是乱码? 大家好 问个 关于apache配置问题
htmlencode还是啥的,具体函数自己搜下吧
大致得到的结论是:
1.有些文章是介绍js实现乱码转换是通过jsp实现的,我对jsp不了解
2.js实现乱码转换是ajax部分,跟现在的这部分我太相关,还有别的解决方法吗?我上面这段代码有什么问题吗?
新浪ip得到的内容为"country":"\u4e2d\u56fd","province":"\u6cb3\u5317",转码实现中文显示
如果这是不对的,哪里不对呢?
如果不对的话,怎么改正呢?提前感谢您的帮助!
@header("Content-type: text/html; charset:GB2312");
function getIpPlace(){
$ip = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js");
//如果仅仅是用来显示的话将变量名替换一下
//$ip = str_replace('var remote_ip_info ', 'var arr', $ip);
// 如果还要二次处理的话那么
$ip = preg_replace('/[^\{]+(\{[^;]+);/i', '\\1', $ip);
$data = array();
foreach(json_decode($ip, true) as $k => $v) {
if($k == 'country') {
$v = iconv('gb2312', 'utf-8', '你在').$v;
}
$data[$k] = $v;
}
$ip = 'var arr = ' . json_encode($data);
return $ip;
}?>
<script>
<?php echo getIpPlace(); ?>;
document.write(arr['country']);
</script>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(function(){
$.get("http://int.dpool.sina.com.cn/iplookup/iplookup.php","format:js",function(e){$("#data").html(e);});});
</script>
<div id="data"></div>用这种纯前端方式试下。不保证浏览器兼容。
如果仅仅显示的话,我按照如下代码(您提供的)测试,提示错误:<?php
@header("Content-type: text/html; charset:GB2312");
function getIpPlace(){
$ip = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js");
$ip = str_replace('var remote_ip_info','var arr',$ip);
//$ip = preg_replace('/[^\{]+(\{[^;]+);/i','\\1',$ip);
$data = array();
foreach (json_decode($ip,true) as $k=>$v){
if ($k == 'country'){
$v = iconv('gb2312','utf-8','你在').$v;
}
$data[$k] = $v;
}
$ip = 'var arr = '.json_encode($data);
return $ip;
}
?>
<script>
<?php echo getIpPlace(); ?>;
document.write(arr['country']);
</script>查看页面的源代码,显示错误信息为:
<b>Warning</b>: Invalid argument supplied for foreach() in <b>D:\wamp\www\my_php\sina_ip\sina_ip_csdn.php</b> on line <b>8</b><br />
无效参数,不太清楚为什么会出现这样的错误,希望您帮忙解释一下,谢谢!
<?php
@header("Content-type: text/html; charset:GB2312");
function getIpPlace(){
$ip = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js");
$ip = str_replace('var remote_ip_info','var arr',$ip);
// 仅仅显示的话,这个就足够了,那个一大坨是处理的相关逻辑
return $ip;
}
?>
<script>
<?php echo getIpPlace(); ?>;
document.write(arr['country']);
</script>
返回的是 js 语句
var remote_ip_info = {"ret":1,"start":"114.106.128.0","end":"114.106.255.255","country":"\u4e2d\u56fd","province":"\u5b89\u5fbd","city":"\u6c60\u5dde","district":"","isp":"\u7535\u4fe1","type":"","desc":""};在页面中可直接引用
<script src='http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js'></script>
<script>
alert(remote_ip_info.start);
</script>在 php 中引用,需
$s = file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js');
preg_match('/{.+}/', $s, $r);
$p = json_decode($r[0]);
print_r($p);stdClass Object
(
[ret] => 1
[start] => 218.23.185.0
[end] => 218.23.185.255
[country] => 中国
[province] => 安徽
[city] => 池州
[district] =>
[isp] => 电信
[type] =>
[desc] =>
)注意:他返回的 json 是 uft-8 编码的