C# 每两位插入一个空格

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验证码类

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

Laravel不同设备使用不同的视图

使用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

ASP.NET WebForm 下载文件,兼容各个浏览器,下载文件名无乱码

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();
}

asp.net core显示环境信息

在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">
                &copy;@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>

VC获取程序所在的目录

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;
}