2017年5月13日 星期六

[Javascript] base64 encode & base64 decode with UTF-8


由於 Javascript 內建函示庫的 atob()  btoa() 不支援UTF8
所以只好用以下的function解決


var Base64 = {



    _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",



    encode: function(input) {

        var output = "";

        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;

        var i = 0;

        input = Base64._utf8_encode(input);



        while (i < input.length) {

            chr1 = input.charCodeAt(i++);

            chr2 = input.charCodeAt(i++);

            chr3 = input.charCodeAt(i++);



            enc1 = chr1 >> 2;

            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);

            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);

            enc4 = chr3 & 63;



            if (isNaN(chr2)) {

                enc3 = enc4 = 64;

            } else if (isNaN(chr3)) {

                enc4 = 64;

            }

            output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

        }

        return output;

    },



    decode: function(input) {

        var output = "";

        var chr1, chr2, chr3;

        var enc1, enc2, enc3, enc4;

        var i = 0;

        input = input.toString();

        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");



        while (i < input.length) {

            enc1 = this._keyStr.indexOf(input.charAt(i++));

            enc2 = this._keyStr.indexOf(input.charAt(i++));

            enc3 = this._keyStr.indexOf(input.charAt(i++));

            enc4 = this._keyStr.indexOf(input.charAt(i++));

          

            chr1 = (enc1 << 2) | (enc2 >> 4);

            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);

            chr3 = ((enc3 & 3) << 6) | enc4;

            output = output + String.fromCharCode(chr1);

            if (enc3 != 64) {

                output = output + String.fromCharCode(chr2);

            }

            if (enc4 != 64) {

                output = output + String.fromCharCode(chr3);

            }

        }

        output = Base64._utf8_decode(output);

        return output;

    },



    _utf8_encode: function(string) {

        string = string.replace(/\r\n/g, "\n");

        var utftext = "";



        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {

                utftext += String.fromCharCode(c);

            }

            else if ((c > 127) && (c < 2048)) {

                utftext += String.fromCharCode((c >> 6) | 192);

                utftext += String.fromCharCode((c & 63) | 128);

            }

            else {

                utftext += String.fromCharCode((c >> 12) | 224);

                utftext += String.fromCharCode(((c >> 6) & 63) | 128);

                utftext += String.fromCharCode((c & 63) | 128);

            }

        }

        return utftext;

    },



    _utf8_decode: function(utftext) {

        var string = "";

        var i = 0;

        var c = c1 = c2 = 0;



        while (i < utftext.length) {

            c = utftext.charCodeAt(i);

            if (c < 128) {

                string += String.fromCharCode(c);

                i++;

            }

            else if ((c > 191) && (c < 224)) {

                c2 = utftext.charCodeAt(i + 1);

                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));

                i += 2;

            }

            else {

                c2 = utftext.charCodeAt(i + 1);

                c3 = utftext.charCodeAt(i + 2);

                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));

                i += 3;

            }

        }

        return string;

    }

}




example:

Base64.decode(data);
Base64.encode(data);


如果喜歡此文章 麻煩幫我點最上面的廣告 謝謝^^
你的支持 會讓我努力寫更多文章
有任何疑問歡迎留言

By 艾摩杰~

2017年5月5日 星期五

[jQuery] 解決 jQuery DataTables 匯出CSV亂碼問題 UTF-8 with BOM


官方範例在匯出CSV時,預設是 UTF-8 without BOM,
導致部分電腦開啟時會產生亂碼
需要改設定值 bom : true 才能解決

官方Docoument連結 : https://datatables.net/reference/button/csv


範例:

$('.js-exportable').DataTable({
        dom: 'Bfrtip',
        responsive: true,
        buttons: [
        'copy', {
                extend: 'csv',
                text: 'CSV',
                bom : true}, 'excel', 'pdf', 'print'
            ]
});




如果喜歡此文章 麻煩幫我點最上面的廣告 謝謝^^
你的支持 會讓我努力寫更多文章
有任何疑問歡迎留言

By 艾摩杰~

2017年4月20日 星期四

[NodeJS] Synology NAS 架設 NodeJS Server , 並用 forever 背景執行程式


先至 Synology 套件中心 安裝Node JS 套件



打開 Synology NAS SSH連線功能,記得設定完要按套用!



接下來就可以用Putty連線進去了~
PS. 沒有Putty的朋友可以至這裡下載   32bit載點  64bit載點   來源網站




登入時 帳號記得是root  密碼是當初設定NAS時 admin的密碼



這時候可以查看一下 NodeJS 是否可用
就用 node -v 指令看一下版本


Synology內建是沒有安裝 forever套件的


這時候可以用npm安裝 forever套件

#npm install forever -g



forever 常用指令
--------------------------------------------------
新增背景執行程式: forever start xxxxx.js
查看目前執行程式清單: forever list
刪除背景執行程式: forever stop UID
PS.程式UID 要從 清單內查詢




如果喜歡此文章 麻煩幫我點最上面的廣告 謝謝^^
你的支持 會讓我努力寫更多文章
有任何疑問歡迎留言

By 艾摩杰~

2016年2月18日 星期四

[MAC] 刪除擾人的 .DS_Store


打開終端機

cd 到指定目錄

因為刪除指令對某些人來說可能有疑慮,所以先看一下整個結果再確定是否要刪除
$find . -name ".DS_Store" -depth -exec echo ----{} \;
結果
----./Library/.DS_Store
----./Library/Application Support/.DS_Store
----./Library/Application Support/com.trankynam.XtraFinder/.DS_Store
----./Library/Application Support/CoRD/.DS_Store
----./Library/Application Support/Developer/Shared/Xcode/.DS_Store
----./Library/Application Support/DEVONthink Pro 2/.DS_Store
----./Library/Application Support/Haroopad/Themes/.DS_Store


正式刪除
find . -name ".DS_Store" -depth -exec rm {} \;


如果喜歡此文章 麻煩幫我點最上面的廣告 謝謝^^
你的支持 會讓我努力寫更多文章
有任何疑問歡迎留言

By 艾摩杰~

2016年2月16日 星期二

[ionic] cordovaPush GCM 推播 範例



安裝 PushPlugin
cordova plugin add https://github.com/phonegap-build/PushPlugin.git


app.js

angular.module('app', ['ionic','ngCordova'])

.run(function($ionicPlatform,$cordovaPush,$rootScope) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleDefault();
    }
 
    var androidConfig = {
      "senderID": "XXXXXXXXXX",
    };

    $cordovaPush.register(androidConfig).then(function(result) {
      //alert(result);
    }, function(err) {
      alert(err);
    })    
  });

  $rootScope.$on('$cordovaPush:notificationReceived', function(event, notification) {
    switch(notification.event) {
      case 'registered':
        if (notification.regid.length > 0 ) {
          alert('registration ID = ' + notification.regid);
          console.log('registration ID = ' + notification.regid);
        }
        break;
      case 'message':
        alert(JSON.stringify(notification));

        break;
      default:
        alert('An unknown GCM event has occurred:'+notification.event);
        break;
    }
  });
})




如果喜歡此文章 麻煩幫我點最上面的廣告 謝謝^^
你的支持 會讓我努力寫更多文章
有任何疑問歡迎留言

By 艾摩杰~

2016年2月5日 星期五

[PHP] 透過php gd轉圖片以程式方式輸出並在程式中取得參數回傳


#php2img 輸出圖片程式
<?
   $pa = $_REQUEST['q'];


   $image = "1.jpg";
   $img=GetImageSize($image);

   switch($img[2]){
      case 1:
         $im=ImageCreateFromGIF($image);
         break;
      case 2:
         $im=ImageCreateFromJPEG($image);
         break;
      case 3:
         $im=ImageCreateFromPNG($image);
         break;
   }

   $logo = "1.jpg";
   $pic=GetImageSize($logo);
   switch($pic[2]){
      case 1:
         $im_pic=ImageCreateFromGIF($logo);
         break;
      case 2:
         $im_pic=ImageCreateFromJPEG($logo);
         break;
      case 3:
         $im_pic=ImageCreateFromPNG($logo);
         break;
   }
//圖片合成
   imagecopy($im,$im_pic,0,500,0,0,100,0);
//顏色設定
   $fc = imagecolorallocate($im,0,0,0);
//首先要文字轉utf-8
   $str = "文字串放這邊";
//加入浮水印
//imagettftext($image, 大小, 旋轉, 與左邊的距離, 與上面的距離, $black, $font, $text);
   imagettftext($im,23,0,35,870,$fc,"msyh.ttf",$str);
//建立真實圖片
   $new_img = imagecreatetruecolor(450,440);
//剪切圖片
   imagecopyresized($new_img,$im,0,0,0,0,450,440,$img[0],$img[1]);
//輸出圖片
   header("Content-type:image/jpeg");

   imagejpeg($new_img);
?>

遠端取得圖片程式
<?php
   $data = base64_encode( file_get_contents('http://1.1.1.1/php2img1.php?q=123456789') );
   echo '<img src="data:image/jpg;base64,' . $data . '" />';
?>

如果喜歡此文章 麻煩幫我點最上面的廣告 謝謝^^
你的支持 會讓我努力寫更多文章
有任何疑問歡迎留言

By 艾摩杰~

2014年10月22日 星期三

[Linux] 使用 XRDP 從 win7 遠端 Ubuntu 桌面


XRDP 可以讓 windows 不需要裝額外 client 就能遠端 Ubuntu

1. 終端機 安裝指令
# apt-get install xrdp


2. 設定 桌面分享


3. Windows 執行 遠端桌面 即可連線




如果喜歡此文章 麻煩幫我點最上面的廣告 謝謝^^
你的支持 會讓我努力寫更多文章
有任何疑問歡迎留言

By 艾摩杰~

2014年10月8日 星期三

[HTML] X-UA-Compatible 設置IE相容模式

強制瀏覽器呈現為特定的版本的標準。它不支持IE7及以下:
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7"/>
如果用分號分開,它設置為不同版本的兼容級別,IE7、IE9。它允許不同層次的向後兼容性:
<meta http-equiv="X-UA-Compatible" content="IE=7; IE-9"/>
只選擇其中一個選項:
<meta http-equiv="X-UA-Compatible" content="IE=9">
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<meta http-equiv="X-UA-Compatible" content="IE=7">
<meta http-equiv="X-UA-Compatible" content="IE=5">
允許更容易的測試和維護。雖然通常比較有用的版本,這是使用模擬:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
什麼版本IE 就用什麼版本的標準模式:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
使用以下代碼強制IE 使用Chrome Frame:
<meta http-equiv="X-UA-Compatible" content="chrome=1">
最佳的兼容模式方案,結合考慮以上兩種:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
指定文件兼容性模式,在網頁中使用meta元素放入X-UA-Compatible http-equiv 標頭。以下是指定為Emulate IE7 mode兼容性之範例:
1<html>
2    <head>
3        <!-- Mimic Internet Explorer 7 -->
4        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
5        <title> My Web Page </title>
6    </head>
7    <body>
8    </body>
9</html>
設定網站服務器以指定預設兼容性模式:
01<?xml version="1.0" encoding="utf-8"?>
02    <configuration>
03        <system.webServer>
04        <httpProtocol>
05     <customHeaders>
06            <clear />
07        <add name="X-UA-Compatible" value="IE=EmulateIE7" />
08        </customHeaders>
09    </httpProtocol>
10    </system.webServer>
11</configuration>


也可以加上這行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
也可以避免這個問題




如果喜歡此文章 麻煩幫我點最上面的廣告 謝謝^^
你的支持 會讓我努力寫更多文章
有任何疑問歡迎留言

By 艾摩杰~