C# 每两位插入一个空格
string txt = "12345678" ;
string result = Regex .Replace(txt, @"(\d{2}(?!$))", "$1 " );
每N位插入一个就把2改成N
上面只分操作全是数字的,如果是适应所有的,可以把\d换成.号
string txt = "ABCD1E2F4G" ;
string result = Regex .Replace(txt, @"(.{2}(?!$))", "$1 " );
C# 每两位插入一个空格
string txt = "12345678" ;
string result = Regex .Replace(txt, @"(\d{2}(?!$))", "$1 " );
每N位插入一个就把2改成N
上面只分操作全是数字的,如果是适应所有的,可以把\d换成.号
string txt = "ABCD1E2F4G" ;
string result = Regex .Replace(txt, @"(.{2}(?!$))", "$1 " );
PHP验证码类
<?php
/**
* 验证码
*/
class Code{
// 1. 定义各个成员 有宽、高、画布、字数、类型、画类型
private $width; //宽度
private $height; //高度
private $num; //验证码字数
private $imgType; //生成图片类型
private $Type; //字串类型 1,2,3 三个选项 1 纯数字 2 纯小写字母 3 大小写数字混合
private $hb; //画布
public $codestr; // 验证码字串
public function __construct($height=20,$num=4,$imgType="jpeg",$Type=1){
$this->width = $num*20;
$this->height = $height;
$this->num = $num;
$this->imgType = $imgType;
$this->Type = $Type;
$this->codestr = $this->codestr();
$this->zuhe();
}
// 2. 定义随机获取字符串函数
private function codestr(){
switch($this->Type){
case 1: // 类型为1 获取1-9随机数
$str = implode("",array_rand(range(0,9),$this->num));
break;
case 2: // 类型为2 获取a-z随机小写字母
$str = implode("",array_rand(array_flip(range(a,z)),$this->num));
break;
case 3: // 类型为3 获取数字,小写字母,大写字母 混合
for($i=0;$i<$this->num;$i++){
$m = rand(0,2);
switch($m){
case 0:
$o = rand(48,57);
break;
case 1:
$o = rand(65,90);
break;
case 2:
$o = rand(97,122);
break;
}
$str .= sprintf("%c",$o);
}
break;
}
return $str;
}
// 3. 初始化画布图像资源
private function Hb(){
$this->hb = imagecreatetruecolor($this->width,$this->height);
}
// 4. 生成背景颜色
private function Bg(){
return imagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250));
}
// 5. 生成字体颜色
private function Font(){
return imagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100));
}
// 6. 填充背景颜色
private function BgColor(){
imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->Bg());
}
// 7. 干扰点
private function ganrao(){
$sum=floor(($this->width)*($this->height)/3);
for($i=0;$i<$sum;$i++){
imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->Bg());
}
}
// 8. 随机直线 弧线
private function huxian(){
for($i=0;$i<$this->num;$i++){
imageArc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->Bg());
}
}
// 9. 写字
private function xiezi(){
for($i=0;$i<$this->num;$i++){
$x=ceil($this->width/$this->num)*$i;
$y=rand(1,$this->height-15);
imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->Font());
}
}
// 10. 输出
private function OutImg(){
$shuchu="image".$this->imgType;
$header="Content-type:image/".$this->imgType;
if(function_exists($shuchu)){
header($header);
$shuchu($this->hb);
}else{
exit("GD库没有此类图像");
}
}
// 11. 拼装
private function zuhe(){
$this->Hb();
$this->BgColor();
$this->ganrao();
$this->huxian();
$this->xiezi();
$this->OutImg();
}
public function getCodeStr(){
return $this->codestr;
}
}
?>
使用composer添加第三方库jenssegers/agent
// language: bash
composer require jenssegers/agent
然后在app/config/app.php 里的服务提供者数组里添加该库, 并添加别名
// language: php
'providers' => [
Jenssegers\Agent\AgentServiceProvider::class,
]
'aliases' => [
'Agent' => Jenssegers\Agent\Facades\Agent::class,
]
使用artisan创建一个服务提供者类php artisan make:provider ResponseMacroServiceProvider
同样要在app.php里面配置
// language: php
'providers' => [
App\Providers\ResponseMacroServiceProvider::class,
]
// 别名用不到,不用配置了
修改app/Providers/ResponseMacroServiceProvider.php的boot方法
// language: php
public function boot(ResponseFactory $factory)
{
$factory->macro('ress', function ($viewname) use ($factory) {
if ( Agent::isMobile() ) {
return view()->make($viewname . "_mobile");
} else {
return view()->make($viewname . "_web");
}
});
}
在Controller中可以这样使用
// language: php
class HomeController extends Controller
{
public function index()
{
return response()->ress('home.index');
//return view('home.index');
}
public function article()
{
return response()->ress('home.article');
}
}
最后就是把视图名改为 _web.blade.php 和 _mobile.blade.php
ubuntu 14.04运行asp.net core程序所需要的一些运行库支持
apt-get install -y libunwind8 libunwind8-dev gettext libicu-dev liblttng-ust-dev libcurl4-openssl-dev libssl-dev uuid-dev
.htaccess 隐藏index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
ASP.NET WebForm 下载文件,兼容各个浏览器,下载文件名无乱码
protected void btnDownload_Click(object sender, EventArgs e)
{
string webPath = Request.QueryString["filename"];
string filePath = Server.MapPath(webPath);//路径
FileInfo fileInfo = new FileInfo(filePath);
string fileName = fileInfo.Name; //客户端保存的文件名
if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize];
Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//获取下载的文件总大小
Response.ContentType = "application/octet-stream";
if (Request.UserAgent.ToLower().IndexOf("msie") > -1 )
{
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
}
else if (Request.UserAgent.ToLower().IndexOf("firefox") > -1)
{
//为了向客户端输出空格,需要在当客户端使用 Firefox 时特殊处理
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
}
else if (Request.UserAgent.ToLower().IndexOf("edge") > -1) // edeg浏览器
{
Response.AddHeader("Content-Disposition", "attachment;filename=" + ToHexString(fileName));
}
else
{
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
}
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
}
/// <summary>
/// 为字符串中的非英文字符编码
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public string ToHexString(string s)
{
char[] chars = s.ToCharArray();
StringBuilder builder = new StringBuilder();
for (int index = 0; index < chars.Length; index++)
{
bool needToEncode = NeedToEncode(chars[index]);
if (needToEncode)
{
string encodedString = ToHexString(chars[index]);
builder.Append(encodedString);
}
else
{
builder.Append(chars[index]);
}
}
return builder.ToString();
}
/// <summary>
///指定 一个字符是否应该被编码
/// </summary>
/// <param name="chr"></param>
/// <returns></returns>
private bool NeedToEncode(char chr)
{
string reservedChars = "$-_.+!*'(),@=&";
if (chr > 127)
return true;
if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)
return false;
return true;
}
/// <summary>
/// 为非英文字符串编码
/// </summary>
/// <param name="chr"></param>
/// <returns></returns>
private string ToHexString(char chr)
{
UTF8Encoding utf8 = new UTF8Encoding();
byte[] encodedBytes = utf8.GetBytes(chr.ToString());
StringBuilder builder = new StringBuilder();
for (int index = 0; index < encodedBytes.Length; index++)
{
builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));
}
return builder.ToString();
}
apache禁止使用服务器IP直接访问
#禁止使用IP直接访问服务器
<VirtualHost *:80>
ServerName 47.89.43.68 #服务器IP
DocumentRoot "/www/htdocs/guest"
<Directory />
Order deny,allow
Deny from all
</Directory>
</VirtualHost>
在razor中添加如下代码,即可在页面显示服务器的环境信息。
@inject Microsoft.Extensions.PlatformAbstractions.IRuntimeEnvironment env
<html>
<body>
<img src="images/ASP-NET-Banners-01.png" />
@("Hello World")
<footer>
<div class="container text-center">
©@DateTime.Now.Year <a href="http://notes.wujie.me">老吴笔记</a> Powered by @($"dotnet-{env.RuntimeType.ToLower()}-{env.RuntimeVersion} on {env.OperatingSystem}")
</div>
</footer>
</body>
</html>
tar打包目录
打包 tar -czf default.tar.gz default
解压 tar -xvf xxx.tar.gz
VC获取程序所在的目录
CString GetCurDir()
{
char sDrive[_MAX_DRIVE ];
char sDir[_MAX_DIR ];
char sFilename[_MAX_FNAME ], Filename[_MAX_FNAME];
char sExt[_MAX_EXT ];
GetModuleFileName(AfxGetInstanceHandle(), Filename, _MAX_PATH);
_tsplitpath(Filename, sDrive, sDir, sFilename, sExt);
CString homeDir(CString (sDrive) + CString(sDir));
int nLen = homeDir.GetLength();
if (homeDir.GetAt(nLen - 1)!= '\\' )
{
homeDir += '\\' ;
}
return homeDir;
}