本帖最后由 a7758521haha 于 2011-05-12 11:16:09 编辑

解决方案 »

  1.   

    这个好像是js就可以转换
    htmlencode还是啥的,具体函数自己搜下吧
      

  2.   

    首先那不是乱码,而是转码,所以你用iconv毫无理由
      

  3.   

    我在网上搜了一下,
    大致得到的结论是:
    1.有些文章是介绍js实现乱码转换是通过jsp实现的,我对jsp不了解
    2.js实现乱码转换是ajax部分,跟现在的这部分我太相关,还有别的解决方法吗?我上面这段代码有什么问题吗?
      

  4.   

    iconv不就是实现转码的吗?
    新浪ip得到的内容为"country":"\u4e2d\u56fd","province":"\u6cb3\u5317",转码实现中文显示
    如果这是不对的,哪里不对呢?
    如果不对的话,怎么改正呢?提前感谢您的帮助!
      

  5.   

    给你一个不同的思路<?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>
      

  6.   


    <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>用这种纯前端方式试下。不保证浏览器兼容。
      

  7.   


    如果仅仅显示的话,我按照如下代码(您提供的)测试,提示错误:<?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 />
    无效参数,不太清楚为什么会出现这样的错误,希望您帮忙解释一下,谢谢!
      

  8.   

    IE8可以显示,firefox4+chrome不能正常显示,虽然对jquery没有了解,还是感谢您分享出你的想法,谢谢!
      

  9.   


    <?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>
      

  10.   

    都在胡说八道!这个地址 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 编码的