php使用json_decode返回NULL

$ch = curl_init();
$url = “http://i.itpk.cn/api.php?question=笑话”;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行HTTP请求
curl_setopt($ch , CURLOPT_URL , $url);
$res = curl_exec($ch);
$res = json_decode(substr($res, 3), true);
//echo json_last_error();

var_dump($res);
curl_close($ch);

问题:json_decode后 var_dump返回NULL (json_last_error返回4),

解决:存在BOM头,去掉BOM头即可: json_decode(substr($res, 3), true);

微软小冰非Api冰聊天接口PHP

使用前需要获取微博的SUB值,什么是SUB呢?sub也就是你的微博账号登录状态下的cookies。和百度的bduss是同意类型的东西

<?php
    //此处新浪微博SUB
   
   
     define('SUB','SUB=******************************************************');
   
   
    //end
    //临时cookies
    $cookie = dirname(__FILE__) . '/weibo.tmp';
    //去除特殊字符
    $contents=htmlspecialchars($_GET[msg]);
    $contents=preg_replace("/s/","",$contents);
    //post数据
    $post = array (
    'content'=>"$contents",
    'rl'=>'2',
    'uid'=>'5175429989',
    'send'=>'发送'
     );
     //curl模拟发送消息
     if($_GET[msg]){}else{
         echo '你提交的内容为空!';
         exit;
     }
    $curl = curl_init();//初始化curl模块
    curl_setopt($curl, CURLOPT_URL, 'http://weibo.cn/msg/do/post?st=7b1272');//登录提交的地址
    curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自动显示返回的信息
    curl_setopt($curl, CURLOPT_COOKIE, SUB);
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中
    curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_exec($curl);//执行cURL
    curl_close($curl);//关闭cURL资源,并且释放系统资源
   sleep(1);
 //读取回复
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://m.weibo.cn/msg/messages?uid=5175429989&page=1');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIE, SUB);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $ct = curl_exec($ch);
    curl_close($ch);
    $ct=json_decode($ct,1);
    //print_r($ct);
    $m=$ct[data][0][text];
    //替换
    $m=str_replace("分享语音","对方给你发送了一段语音。暂时无法显示",$m);
    $m=str_replace("分享图片","对方给你发送了图片音。暂时无法显示",$m);
    //返回的结果
    echo $m;
?>

http://www.thinksaas.cn/topics/0/529/529544.html

淘宝IP地址库 rest api

接口说明

继续阅读“淘宝IP地址库 rest api”

基于emoji 国际通用表情在web上的输入与显示的记录

定义:

emoji 即国际通用表情

场景:

1,ios,android,wp上emoji表情输入与显示

2,web也需作为支撑平台对emoji表情就行输入与显示(解析)

问题:

1,app端输入的表情在web端显示的是乱码(比如方括号,问号,和实际编码有关)

2,mysql 存储emoji报异常(0xF0 0x9F 0x8F 0x8),此记录不做问题处理,请参考http://blog.csdn.net/qdkfriend/article/details/7576524

解决:暂且对web显示(问题1)的处理

所需js库,按顺序依赖

emoji-list-with-image.js 存储emoji编码和表情图片数据,格式如[“e415″,”1f604″,”iVBORw0KGg…”]

punycode.js 编码解析库

emoji.js  解析emoji编码

示例用法

 //解析存储的emoji表情
function parse(arg) {
    if (typeof ioNull !='undefined') {
        return  ioNull.emoji.parse(arg);    
    }
    return '';
};
 //反解析(web上,图片数据转为emoji字符编码存储)
function decode(htmlStr) {
    //todo 正则替换性能更优?unicode16="1f603"
    if (typeof ioNull == 'undefined') {
        return '';
    }
    var tempStr = htmlStr, unis = '', $imgs = $('<div>').append(htmlStr).find('img');
    $.each($imgs , function (i, o) { 
        var $img = $(o);
        var unicode16 = '0x' + $img.attr('unicode16'); //十六进制
        unicode16 = ioNull.emoji.decodeChar(unicode16);
        //unis += unicode16;
        tempStr = tempStr.replace($('<div>').append($img).html(), unicode16);
    });
    //System.log(unis)
    return tempStr;
};

emoji.js 提供了getEmojiList 方法,获取所有类别的emoji数组集合,其中单项格式为[0“e415”,1“1f604”,2“emoji对应的base64图片数据”]

//示例生成emoji图片输入 
function renderEmoji()
{
var emos = getEmojiList()[0];//此处按需是否生成所有emoji
            var html = '<div >常用表情</div><ul>';
            for (var j = 0; j < emos.length; j++) {
                var emo = emos[j];
                var data = 'data:image/png;base64,' + emo[2];
                if (j % 20 == 0) {
                    html += '<li class="">';
                } else {
                    html += '<li>';
                }
                html += '<img style="display: inline;vertical-align: middle;" src="' + data + '"  unicode16="' + emo[1] + '" /></li>';

            }
//.......
}

表情输入示例图

至此主要emoji解析与反解析已得到处理

 

附上js库压缩包下载http://files.cnblogs.com/jtans/emoji-lib.zip,

参考网址 http://www.iemoji.com/

继续阅读“基于emoji 国际通用表情在web上的输入与显示的记录”

全面了解MySQL中utf8和utf8mb4的区别

下面小编就为大家带来一篇全面了解mysql中utf8和utf8mb4的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、简介

MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。

二、内容描述

那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。

三、问题根源

最初的 UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。

utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。

Mysql 中的 utf8 为什么只支持持最长三个字节的 UTF-8字符呢?我想了一下,可能是因为 Mysql 刚开始开发那会,Unicode 还没有辅助平面这一说呢。那时候,Unicode 委员会还做着 “65535 个字符足够全世界用了”的美梦。Mysql 中的字符串长度算的是字符数而非字节数,对于 CHAR 数据类型来说,需要为字符串保留足够的长。当使用 utf8 字符集时,需要保留的长度就是 utf8 最长字符长度乘以字符串长度,所以这里理所当然的限制了 utf8 最大长度为 3,比如 CHAR(100) Mysql 会保留 300字节长度。至于后续的版本为什么不对 4 字节长度的 UTF-8 字符提供支持,我想一个是为了向后兼容性的考虑,还有就是基本多文种平面之外的字符确实很少用到。

要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持(查看版本: select version();)。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。

以上这篇全面了解mysql中utf8和utf8mb4的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

继续阅读“全面了解MySQL中utf8和utf8mb4的区别”

PHP防止页面刷新、重复提交数据

1、提交页面
<?php
   session_start();
   $t=mktime();
   $_SESSION[‘conn_id’]=$t;
   $_SESSION[‘conn’]=$t;
   var_dump($_SESSION);
   var_dump($_COOKIE);
?>
<html>
<head>
<title>防止刷新提交或者重新提交</title>
</head>
<body>
<form method=”POST” action=”get.php”>
<span>username:</span><input type=”text” name=”username” id=”username”><br>
                    <input type=”hidden” name=”hidden” id=”hidden” value=”<?php echo $_SESSION[‘conn_id’]?>”>
<span>message:</span><input type=”text” name=”message” id=”message”><br>
                    <input type=”submit” value=”submit”>
</form>
</body>
</html>
2、服务器端接收页面
<?php
    session_start();
    $username = $_POST[‘username’].”<br>”;
    $message  = $_POST[‘message’];
    $hide     = $_POST[‘hidden’];
    var_dump($_SESSION);
   if($hide==$_SESSION[‘conn’])
   {
       echo “亲,提交成功了哦”;
   }else
   {
   echo “<script>alert(‘亲!就知道你会刷新提交,stop 你已经提交成功啦’);</script>”;
   echo “<script>window.location.href=’index.php’;</script>”;
   }
   session_destroy();
?>