1、字符串转换为数组
var string = '123,456,789';
var stringResult = string.split(',');
console.log(stringResult) //输出["123", "456", "789"]
var string2 = 'abcdef'
var string2Result = string2.split('')
console.log(string2Result) //输出['a','b','c','d','e','f']
string2.split(",").map(Number);//输出[123,456,789]
JSON.parse("[" + string + "]"); //输出[123,456,789]
2、数组转换为字符串
var array = ['abc', 'def', 'hig']
var arrayResult = array.join(',')
console.log(arrayResult) // 输出"abc,def,hig"
array.toString()//输出"abc,def,hig"
分类目录归档:前端HTML及JS
js过滤emoji表情符号
手机端常常会遇到用户输入框,输入emoji,如果是数据库是UTF8,会遇到报错:SQLException: Incorrect string value: ‘\xF0\x9F\x98\x84’ for column ‘review’ at row 1
原因是:UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。
过滤
php过滤emoji表情:
$name = preg_replace('/[^\\u0000-\\uFFFF]/ig', '', $string);
js过滤emoji表情:
name = name.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/g, "");
小程序上传图片or文件到阿里云OSS
搞了大半天,累死了,原本在阿里云官网通过后台取签上传的方式,前端会用到lib,例子下载后无法加入到小程序中使用,后来在CSDN的一篇博文里找到了解决方案
后端get.php,callback.php从阿里云例子中取,直接用
get.php代码
<?php
function gmt_iso8601($time) {
$dtStr = date("c", $time);
$mydatetime = new DateTime($dtStr);
$expiration = $mydatetime->format(DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration."Z";
}
$id= 'xxxxxxxx'; // 请填写您的AccessKeyId。
$key= 'xxxxxxxx'; // 请填写您的AccessKeySecret。
// $host的格式为 bucketname.endpoint,请替换为您的真实信息。
$host = 'https://bucket名称.oss-cn-地域.aliyuncs.com/';
// $callbackUrl为上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实URL信息。
$callbackUrl = 'callback.php的网络路径';
$dir = '文件保存路径'; // 用户上传文件时指定的前缀。
$callback_param = array('callbackUrl'=>$callbackUrl,
'callbackBody'=>'filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}',
'callbackBodyType'=>"application/x-www-form-urlencoded");
$callback_string = json_encode($callback_param);
$base64_callback_body = base64_encode($callback_string);
$now = time();
$expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问。
$end = $now + $expire;
$expiration = gmt_iso8601($end);
//最大文件大小.用户可以自己设置
$condition = array(0=>'content-length-range', 1=>0, 2=>1048576000);
$conditions[] = $condition;
// 表示用户上传的数据,必须是以$dir开始,不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录。
$start = array(0=>'starts-with', 1=>'$key', 2=>$dir);
$conditions[] = $start;
$arr = array('expiration'=>$expiration,'conditions'=>$conditions);
$policy = json_encode($arr);
$base64_policy = base64_encode($policy);
$string_to_sign = $base64_policy;
$signature = base64_encode(hash_hmac('sha1', $string_to_sign, $key, true));
$response = array();
$response['accessid'] = $id;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
$response['callback'] = $base64_callback_body;
$response['dir'] = $dir; // 这个参数是设置用户上传文件时指定的前缀。
echo json_encode($response);
?>
callback.php不用改
小程序前端:
uploadAliyun(str){ //str是wx.chooseImage返回的res.tempFilePaths[0]
var that = this;
wx.uploadFile({
url: 'xxxx/get.php', //你的服务器地址
filePath: str, //要上传文件资源的路径
name: 'headimg', //文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容
formData: {
adminid: app.globalData.adminid //HTTP 请求中其他额外的参数比如 用户id
},
success(res) {
console.log(res)
if(res.statusCode == 200){
var info = JSON.parse(res.data);
// 随机生成文件名称
var fileRandName = Date.now() + "" + parseInt(Math.random() * 1000)
var fileName = fileRandName + '.' + that.get_suffix(str)
wx.uploadFile({
url: 'https://bucket名称.oss-cn-地域.aliyuncs.com',
filePath: str,
name: 'file',
formData: {
name: str,
key: info.dir + fileName,
policy: info.policy,
signature: info.signature,
expire : info.expire,
success_action_status: "200",
host: info.host,
OSSAccessKeyId : info.accessid
},
success: function (res) {
var data = res.data
console.log(res)
if(res.statusCode == 200){ }
}
})
}
}
})
},
补充get_suffix功能函数
get_suffix: function(filename) {
var pos = filename.lastIndexOf('.')
var suffix = ''
if (pos != -1) {
suffix = filename.substring(pos)
}
return suffix;
},
js实现replaceAll方法
js本来有replace方法,请看w3school的说明:
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
语法:
stringObject.replace(regexp/substr,replacement)
第一个参数为一个字符串或者一个正则表达式,第二个参数为一个字符串或者一个用于生成字符串的函数。
注意重点:
如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。
实例:
var str = "dogdogdog"; var str2 = str.replace("dog","cat"); console.log(str2);
这里仅替换第一个dog字符串,输出为:catdogdog。
js中是没有replaceAll方法的,那么如何实现替换所有匹配的字符串呢,即在js中实现replaceAll方法:
1. 使用具有全局标志g的正则表达式
var str = "dogdogdog"; var str2 = str.replace(/dog/g,"cat"); console.log(str2);
实现替换全部匹配字符串,输出结果为:catcatcat。
2. 使用另一种具有全局标志g的正则表达式的定义方法
var str = "dogdogdog"; var str2 = str.replace(new RegExp("dog","gm"),"cat"); console.log(str2);
输出结果同上例。这里g表示执行全局匹配,m表示执行多次匹配。
3. 给string对象添加原型方法replaceAll()
String.prototype.replaceAll = function(s1, s2) { return this.replace(new RegExp(s1, "gm"), s2); }
这样就可以像使用replace方法一样使用replaceAll方法:
var str = "dogdogdog"; var str2 = str.replaceAll("dog", "cat"); console.log(str2);
输出结果同上例。
个人推荐使用第3种方法。
php vs js中判断一个字符串包含另一个字符串的方法
PHP
第一种方法:用php的strpos() 函数判断字符串中是否包含某字符串的方法
if(strpos('www.jb51.net','jb51') !== false){
echo '包含jb51';
}else{
echo '不包含jb51';
}
第二种 使用了explode
用explode进行判断PHP判断字符串的包含代码如下:
<?php
$name = "001x.gif";
$pan = "x";
$con = explode($pan,$name);
if (count($con)>1):
echo $name."中包含".$pan;
else:
echo $name."中没有包含".$pan;
endif;
?>
第三种strstr
strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。
该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。
代码如下:
<?php
/*如手册上的举例*/
$email = 'user@example.com';
$domain = strstr($email, '@');
echo $domain;
// prints @example.com
?>
第四种、stristr
stristr() 函数查找字符串在另一个字符串中第一次出现的位置。
如果成功,则返回字符串的其余部分(从匹配点)。如果没有找到该字符串,则返回 false。
它和strstr的使用方法完全一样.唯一的区别是stristr不区分大小写.
JS
String对象的方法
方法一: indexOf() (推荐)
var str = "123";
console.log(str.indexOf("3") != -1 ); // true
//indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。
方法二: search()
var str = "123";
console.log(str.search("3") != -1 ); // true
//search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回 -1。
方法三:match()
var str = "123";
var reg = RegExp(/3/);
if(str.match(reg)){
// 包含
}
//match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
RegExp 对象方法
方法四:test()
var str = "123";
var reg = RegExp(/3/);
console.log(reg.test(str)); // true
//test() 方法用于检索字符串中指定的值。返回 true 或 false。
方法五:exec()
var str = "123";
var reg = RegExp(/3/);
if(reg.exec(str)){
// 包含
}
//exec() 方法用于检索字符串中的正则表达式的匹配。返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
CSS div水平垂直居中和div置于底部
一、水平居中
.hor_center { margin: 0 auto; }
二、水平垂直居中
.content { width: 360px; height: 240px; } .ver_hor_center { position: absolute; top: 50%; left: 50%; margin-left: -180px; /*要居中的div的宽度的一半*/ margin-top: -120px; /*要居中的div的高度的一半*/ }
三、div置于底部(footer)
.bottom_footer { position: fixed; /*or前面的是absolute就可以用*/ bottom: 0px; }
HTML+CSS+JS dTree 树形目录的使用
example 压缩包:https://pan.baidu.com/s/1DI2mM3iSnKtpkV45-gUzAA 提取码: m1pi
使用注意事项:
1)dtree.js里可以修改点击项目的操作
原js文件里的nodeSel和node的样式切换不生效,可以在点击方法里添加
var cur_sel_id = -1;
function setDetail(api_id, name){
console.log(api_id);
if(cur_sel_id >= 0){
var old = document.getElementById("sd"+ cur_sel_id);
old.className = "node";
}
eNew = document.getElementById("sd"+ api_id);
eNew.className = "nodeSel";
…………
}
也可在dTree官网查看学习dTree api使用
JS字符串和数组之间的转换
1、字符串转换为数组
var string = ‘123,456,789’;
var stringResult = string.split(‘,’);
console.log(stringResult) //输出[“123”, “456”, “789”]
var string2 = ‘abcdef’
var string2Result = string2.split(”)
console.log(string2Result) //输出[‘a’,’b’,’c’,’d’,’e’,’f’]
string2.split(“,”).map(Number);//输出[123,456,789]
JSON.parse(“[” + string + “]”); //输出[123,456,789]
2、数组转换为字符串
var array = [‘abc’, ‘def’, ‘hig’]
var arrayResult = array.join(‘,’)
console.log(arrayResult) // 输出”abc,def,hig”
array.toString()//输出”abc,def,hig”
textarea 存储与显示 保持格式
今天遇到的一个问题:在数据添加页面的textarea框中写入有回车换行和空格的数据,但是传到数据库之后显示到网页上的内容却没有格式,全部排成了一排网上查了很多,终于使得网页和textarea里格式保持一致了,这里记个笔记
js函数:
/**
* @funciton 转换textarea存入数据库的回车换行和空格 textarea --- 数据库,用val取数据,置换'\n'
*/
function textareaTo(str){
var reg=new RegExp("\n","g");
var regSpace=new RegExp(" ","g");
str = str.replace(reg,"<br>");
str = str.replace(regSpace," ");
return str;
}
/**
* @funciton 数据库 --- 编辑页面 .val(str)
*/
function toTextarea(str){
var reg=new RegExp("<br>","g");
var regSpace=new RegExp(" ","g");
str = str.replace(reg,"\n");
str = str.replace(regSpace," ");
return str;
}
输入框中:
<textarea id=’text’></textarea>
1)用val()获取内容:
$(‘#text’).val();
这时的内容包含:文字,回车换行:’\n’,空格:’ ‘ 但是如果直接传入数据库,格式会被去掉
2)这里使用上面转换函数: 将文本转换为了HTML的格式,’\n’ 转换为 <br/>,’ ‘ 转换为
textareaTo($(‘#text’).val());
3)然后从数据库显示到页面上:
<div id=’content’></div> //数据是data
$(‘#id’).html(data); //直接显示的就是含回车换行和空格的
4)从数据库显示到textarea中 //数据data
使用函数toTextarea()函数将html格式内容转换为文本格式:
$(‘#text’).val(toTextarea(data));
5) 前面一直使用的是val()获取textarea内容和显示内容到textarea中,所以在转换函数中用的是 :’\n’
但是当使用:$(‘#text’).text();获取内容的时候,这时的回车换行是:’\r’,所以转换函数里面的 ‘\n’ 要换成 ‘\r’,这是两个 text() 和 val() 的一个区别,注意不要混淆了,
若是’\r\n’一起使用,我测试的是失败,不能正确转换格式
原文:https://blog.csdn.net/u012606532/article/details/77802535
CSS样式-border-radius圆形边框基本用法
主要通过属性border-radius,您能够创建圆角边框,正圆边框和椭圆边框,使用图片来绘制边框 。
圆角边框(border-radius)的基本用法:
圆角边框的最基本用法就是设置四个相同弧度的圆角,其样式如下:
css部分:div{ width: 300px; height: 300px;border: 1px solid red;border-radius: 20px;}
html部分:<div> 四个圆角相等的圆角矩形</div>其效果如下:
如果将值设为50%,则实现正圆形,其效果如下:
css部分:div{ width: 300px; height: 300px;border: 1px solid red;border-radius:50%;}
html部分:<div> 正圆形</div>
(注:正圆只能实现在四边相等的条件下 如不等则实现为椭圆形)
如果输入两个值实现值的位置顺序为:值1(左上 右下)值2(左下 右上)
css部分:div{ width: 300px; height: 300px;border: 1px solid red;border-radius: 20px 100px;}
html部分:<div> 输入两个值实现值的位置顺序</div>其效果如下:
如果输入三个值实现值的位置顺序为:值1(左上 )值2(左下 右上)值3(右下)
css部分:div{ width: 300px; height: 300px;border: 1px solid red;border-radius: 20px 100px 50px;}
如果输入四个值实现值的位置顺序为:值1(左上 )值2( 右上)值3(右下)值4 (左下)
css部分:div{ width: 300px; height: 300px;border: 1px solid red;border-radius: 20px 100px 50px 50px;}
html部分:<div> 输入四个值实现值的位置顺序</div>其效果如下: