Incorrect string value: '\xF0\x9F\x98\xAD",...' for column...的解决方法
最近在微信开发时遇到以下错误:
Incorrect string value: '\xF0\x9F\x90\xB3 \xE4...' for column 'nickname' at row 69302
原因:用户昵称中有emoji表情,而emoji表情为4字节utf-8字符,mysql只支持不超过3字节的utf-8字符,所以写入失败。
4字节utf-8字符包括Emoji表情(Emoji 是一种特殊的 Unicode 编码,常见于 iOS 和 Android 手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。
MySQL 版本>=5.5.3支持utf8mb4编码,使用这个编码可以支持4字节utf-8字符。
MySQL低于5.5.3版本,可以过滤掉4字节字符,或采用base64_encode进行编码后保存,输出时再base64_decode解码。
/** * 过滤掉emoji表情(4字节utf8编码字符) */ function filter_emoji($str){ return preg_replace_callback('/./u', function(array $match){return strlen($match[0]) >= 4 ? '' : $match[0];}, $str); }
参考:
http://blog.csdn.net/yan791124465/article/details/70738939
http://blog.csdn.net/hzw19920329/article/details/55670782
http://blog.csdn.net/secretx/article/details/21253559
微信投票防刷票方法汇总中……
1、在活动进行中不显示每个人的票数,不显示排行
2、投票前必须先关注公众号(涉嫌诱导关注),然后每个openid在活动期间只能投1票(增加刷票成本),取消关注减票
3、如果有条件可以添加第三方的行为验证码,防机刷
4、每分钟票超过N票,锁定X分钟
5、限制单个选手每天可以获取的最多票数
6、单独做刷票检测程序,如果某选手的票数某段时间内每分钟都有增加,就有刷票嫌疑
7、有大量昵称为随机字母,且缺少基本信息(头像、性别、地区等)的微信用户投票,有刷票嫌疑
8、大量基本信息中地区为非中国地区的微信用户投票, 有刷票嫌疑
9、给某个选手投票的微信用户头像是同一类型的图片(美女、动物等),有刷票嫌疑
10、投票周期不要太长
11、活动规则要明确刷票后果,可以在规则中说明刷票后果等等
12、手机验证码防刷票
13、网络投票的票数不是唯一的判断标准。在公开投票结束后,再增加一轮参赛选手投票,每个选手只能投一票,且不能投给自己。选手投票权重要远高于公众投票(如:选手1票=公开投票期总票数/参赛选手数),这样是不是又会出现有人用多个号报名,提前潜伏?!
反思:某严惩刷票的投票活动中,选手C为了挤掉排在自己前面的选手A,而雇水军恶意给A刷票,A被举办方查到有刷票行为,而取消参赛资格,C获胜,此事可有解?(不显示每个人的票数,貌似可行)
14、参考投票吧防刷票 http://www.vote8.cn/AntiCheat
15、使用行为验证码,这个比较可行
以下转载至投票吧防刷票专题
http://www.vote8.com/AntiCheat
邀请码
1、什么是邀请码: 投票者必须凭邀请码才能投票,且只能使用一次。
2、适用场景: 适合投票人群固定的小范围投票活动使用,由投票组织人向每人发放一个邀请码,可有效杜绝作弊刷票。
3、如何生成邀请码: 点击下方的"生成邀请码"按钮即可进入生成向导。可以自动生成指定数量的邀请码,还可以为每个邀请设置对应的用户名称标识(如姓名、QQ、工号等),便于识别哪些用户还没投票。
地理位置限制
可限定指定省份或城市的用户才允许投票,对于区域性投票活动的防刷票特别有效。技术上,除了通过IP地址,投票吧还使用了最新的html5技术用于地理位置识别,可更精确的实现用户地理位置定位。地理位置识别功能演示
微信号验证
如启用微信号验证,可限制每个微信号只能投一次或每天若干次,并可在投票日志记录用户的微信号公开信息(昵称、头像等),可非常有效的防止微信刷票行为。 微信验证同时支持电脑和手机投票:使用电脑投票会提示用微信客户端扫描电脑屏幕的二维码;使用手机等移动设备投票,则必须通过微信客户端进入投票,投票前会提示授权验证微信账号(一键授权验证,无需密码),按此了解《如何创建发起微信投票》。 微信验证功能演示
关注微信公众号才能投票
可限制必须关注特定微信公众号才能投票,既能防刷票又能吸粉。 关注指定微信公众号才能投票演示
QQ号验证
投票前要求在网页进行QQ登录验证(通过QQ官方接口验证),以限制每个QQ号只能投票一次,可在一定程度上增加刷票难度。
邮箱验证码
系统会将验证码发送到投票者指定的邮箱,相同的邮箱,不能重复参与投票。当然,作弊者可以通过注册大量真实邮箱来绕过这个限制,所以邮箱验证码只能说是增加了作弊成本。 邮箱验证码功能演示
限定指定邮箱
这是对邮箱验证码功能的补充,除实现相同邮箱不能重复投票功能外,管理员还需要明确指定允许哪些邮箱参与投票,对于可确定投票者邮箱的小范围投票活动,可非常有效的防范刷票作弊。
手机验证码
与邮箱验证码类似,系统会将验证码用短信发送到投票者指定的手机,相同的手机号,不能重复参与投票。相比邮箱验证码,如果作弊者要刷票,必须掌握大量手机号才可以,将大大增加作弊成本。
高级设备特征识别技术
常见的限制一台手机、一台电脑投票次数的手段是通过浏览器的Cookie进行记录和识别,但删除Cookie即可绕过限制,投票吧应用了进阶的设备特征技术,通过特定算法识别出设备的唯一性,且不需要依赖Cookie,可以更为有效的实现"一机一票"有效防范刷票行为,此技术对微信也有较好的支持,可有效限制同一台手机通过切换微信账号的微信刷票。
自定义输入栏
自定义输入栏用于让投票者提交更多信息,常用于信息收集,例如要求录入"联系方式、居住地";还可用于实名投票,例如要求录入"姓名、工号"等个人资料,并勾选"禁止重复",可在一定程度上防范作弊刷票。 自定义输入栏功能演示
日志分析
所有投票人次的时间、IP、所选选项、邮箱、手机都会一一记录,管理员可通过对日志的人工分析,发现可疑的投票行为。
投票结果显示
可以自有设置在投票前或投票后是否显示投票结果,为防范刷票,建议设置为投票结束后才显示票数。
强制停留时间
可要求用户在投票网页停留一定时间才能投票,可一定程度增加刷票成本。
我的.htaccess
RewriteEngine On #以old开头的请求301跳转到www.XXX.com首页 RewriteCond %{request_uri} ^/old [NC] RewriteRule ^(.*)$ http://www.XXX.com/ [L,R=301] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond $1 !^(robots\.txt|favicon\.ico)$ RewriteCond $1 !^.+\.(ico|js|css|jpg|jpe|jpeg|png|bmp|gif|mp4|flv|swf|txt|pdf|zip|rar|htm|doc|docx|xls|xlsx)$ #部分IIS中!-f无效,需要下面一行以防止手机站被index.php解析 RewriteCond $1 !^m\.php RewriteRule ^(.*)$ index.php/$1 [L]
允许跨域
Header add Access-Control-Allow-Origin "http://aaa.example"
中文-未验证
RewriteRule ([\x80-\xffa-zA-Z]{1,})-([0-9]{1,}).html$ test.php?action=$1&id=$2
根据域名跳转,下面把abc.com的所有访问临时跳转到def.com(含querystring)
Rewritecond %{HTTP_HOST} ^(www\.)?abc.com$ [NC] Rewriterule ^(.*)$ http://def.com/$1 [R=302,L]
RewriteCond %{request_uri} ^/old [NC] RewriteRule ^(.*)$ http://www.XXX.com/ [L,R=301]以上会把 http://abc.com/old?kw=text 跳转到 http://www.xxx.com/?kw=text
如果要舍弃QUERY_STRING,只需在跳转网址后加问号(正则结尾)即可,如下:
RewriteCond %{request_uri} ^/old [NC] RewriteRule ^(.*)$ http://www.XXX.com/? [L,R=301]
下面可以用于不支持asp的服务器,把百度收录的原asp网页跳转到指定页面。
RewriteRule ^(.*)\.asp http://www.abc.com/baidu/index/$1 [R=301,L]
nginx伪静态
if (!-e $request_filename) { rewrite ^/manage\.php /manage.php last; rewrite ^.*$ /index.php last; }
不是ico/jpg/png/gif中的一种时才进行伪静态重写
location ~* .*(?<!\.(ico|jpg|png|gif))$ { if (!-e $request_filename) { rewrite ^/manage\.php /manage.php last; rewrite ^.*$ /index.php last; } }
防止网站内部搜索被他人恶意利用
详见百度站长学院:https://zhanzhang.baidu.com/college/articleinfo?id=117
除了文章中说的方法,也可以把搜索页地址写入robots.txt,禁止搜索引擎收录。
Fatal error: Call-time pass-by-reference has been removed in...的处理方法
当我们这样使用函数(或者类)的话,会产生一个error:
foo(&$var);
实际上,这样用本来就是错的,只是之前的错误级别仅仅是Deprecated而已。
而正确的使用方法应该是在函数定义时:
function foo(& $var) {
//other code
}
而在调用时直接传参就行了: foo($var);
PHP:Fatal error: Class 'COM' not found in … 的处理办法
一般执行3、4两条即可
1、首先在windows的“服务”里面检查COM+服务是否已经启动。如果未启动,请启动它。
大概是该服务:Windows Management Instrumentation2、检查php目录ext文件夹下面php_com_dotnet.dll是否存在。(顺便说一下,ext通常作为php程序的扩展目录,在安装php的时候一般已经设置好。否则就应该不仅仅报主题所说的错咯。)
3、如果没问题,在php.ini里面加入以下语句:
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
4、php.ini中设置
com.allow_dcom = true
5.PHP版本
PHP 5.4.5以前的版本,只需要在php.ini中把com.allow_dcom = true打开就可以了,但是5.4.5版本以后,PHP把com/dotnet 模块集成到了一个单独的扩展中,所以需要在php.ini中加一行扩展extension=php_com_dotnet.dll,是加一行,不是打开,默认配置文件中没有这一行的,然后重启IIS或Apache,再次运行就正常了!
CodeIgniter使用rewrite时出现404的原因
.htaccess中有如下一条,本意是要把/m重写为/m.php,结果总是 404错误
RewriteRule ^m/(.*)$ m.php/$1 [L]
原因:
config/config.php
$config['uri_protocol'] = 'REQUEST_URI';
要改为
$config['uri_protocol'[ = 'PATH_INFO';
否则CI无法根据重写后的uri获取请求的class和method,从而导致出错。
当访问地址为 http://abc.com/m 没有以 / 结尾时仍不能正确重写到 m.php,需要在.htaccess中增加如下一行(加在 RewriteRule ^m/(.*)$ m.php/$1 [L] 的前面):
RewriteRule ^m$ /m/ [R=301,NC,L]
参考:http://blog.csdn.net/newjueqi/article/details/12014673
如果服务器不支持$_SERVER['PATH_INFO'],可以在服务器上输入$_SERVER数组,查看是否支持$_SERVER['ORIG_PATH_INFO'],支持的话以ORIG_PATH_INFO代替PATH_INFO,当前要观察两个值是否相同,如果不相同,需要同时修改 system/core/URI.php 中关于$uri获取的部分。我本地电脑中ORIG_PATH_INFO和PATH_INFO的值不一样。阿里云虚拟主机不支持PATH_INFO,但ORIG_PATH_INFO的值却与我本地的PATH_INFO一样。
border-radius溢出
如下CSS鼠标滑过时在360浏览器的极速模式下,会出现border-radisu溢出,图片仍是方形,直至transform动画结束。
a{ display:block; width:100px; height:100px; border-radius:50%; overflow:hidden; } a img{ width:100%; height:100%; transition:transform ease .5s; } a:hover img{ transform:scale(1.05); }
解决方法:
a{ position:relative; z-index:1; }
MySQL运算符优先级
常常发现很多基础的知识才是最重要的,是我们修复Bug的利器。
#MySQL运算符的优先级
运算符的优先级决定了不同的运算符在表达式中计算的先后顺序。
MySQL中所有运算符的优先级的顺序按照从高到低,从上到下,依次降低。一般情况下,级别高的运算符先进行计算,如果级别相同,MySQL按照表达式的顺序从左到右依次计算。
MySQL运算符的优先级如下:
优先级 运算符 (最高) ! 3 -(负号),~(按位取反) 4 ^(按位异或) 5 *,/(DIV),%(MOD) 6 +,- 7 >>,<< 8 & 9 | 10 =(比较运算),<=>,<,<=,>,>=,!=,<>,IN,IS NULL,LIKE,REGEXP 11 BETWEEN AND,CASE,WHEN,THEN,ELSE 12 NOT 13 &&,AND 14 XOR 15 ||,OR (最低) =(赋值运算),:=
我们可以看出,不同运算符的优先级是不同的。在无法确定优先级的情况下,可以使用圆括号()来改变优先级,并且这样会使计算过程更加清晰。
301转跳
ASP:
<% Response.Status = "301 Moved Permanently" Response.AddHeader "Location", new_url %>
PHP:
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: http://abc.com".$_SERVER['REQUEST_URI']); ?>