2018年6月29日 星期五

【PHP】判斷連結圖片是否存在,如果不存在將他移除

// 建立白名單
require_once('../class/htmlpurifier/HTMLPurifier.auto.php');
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML', 'Allowed', 
'
,area[accesskey|alt, coords|href|name|shape|tabindex|target]
,img[alt|border|height|ismap|src|usemap|width]
,b,blockquote[cite],br,dd,dl,dt,em,h1,h2,h3,h4,h5,h6
,hr,i,li[value],map,ol[start|type]
,nav[accesskey|contenteditable|contextmenu|data-*|draggable|dropzone|hidden|spellcheck|tabindex|translate]
,ol[start|type],p,pre,rp,rt,ruby,s,small,source,strike,strong,style,sub,sup,
,table[border|cols|summary|cellpadding|cellspacing|align]
,tbody[valign],td[bordercolor|colspan|rowspan],tfoot[valign]
,th[colspan|rowspan|scope],thead[valign],tr[colspan|rowspan]
,tt,u,ul,video[autoplay|controls|height|loop|muted|poster|preload|src|width]
,div[style|class|id]
,span[style|class|id]
'
);

$purifier = new HTMLPurifier($config);
$rs['description'] = $purifier->purify($rs['description']);


// 判斷連結圖片是否存在,如果不存在將他移除
preg_match_all("//", $rs['description'], $img_arr);

if ($img_arr)
{

 foreach($img_arr[1] as $key=>$img)
 {
  $size_arr = getimagesize($img);

  if (!$size_arr)
  {
   $img_arr[0][$key];
   $rs['description'] = str_replace($img_arr[0][$key], '', $rs['description']);
  }
 }
}

2018年6月28日 星期四

【PHP】addslashes & stripslashes 符號前加斜線

常常忘了這兩個函數 addslashes、stripslashes

$str = "Is your name O'reilly?";

// 輸出:Is your name O\'reilly?
$str = addslashes($str);
echo $str;

echo stripslashes($str);

【PHP】簡易mail發送

// 寄信 email可用逗點分隔一次寄給多人
function send_mail($subject, $content, $email, $cc=array()){
 $charset = 'utf-8';
 $sitename = PROJECT_NAME;
 $ADM_EMAIL = ADM_EMAIL;
 $encoded_subject = mail_header_encode($subject,$charset);
 $sitename2 = mail_header_encode($sitename,$charset);  
 
 $headers = "From: ".$sitename2 ."<".$ADM_EMAIL.">". "\r\n";
 $headers .= "Content-Type: text/html; charset=$charset; format=flowed". "\r\n";
 $headers .= "MIME-Version: 1.0". "\r\n";
 $headers .= "Content-Transfer-Encoding: 8bit". "\r\n";
 $headers .= "X-Mailer: PHP". "\r\n";
 
 if ($cc){
  foreach($cc as $mail){
   $headers .= "Cc: $mail" . "\r\n";
  }
 }
 
 $r = mail($email, $encoded_subject, $content, $headers);
 return $r;
}

// 寄信用的編碼
function mail_header_encode($str,$charsets){
 return "=?$charsets?B?".base64_encode($str)."?=";
}

【jquery】插入內容方式

久沒用就會忘記,快點記下來
after()
before()
insertAfter()
insertBefore()
prepend()
prependTo()
append()
appendto()

2018年6月27日 星期三

【javascript】framework

javascript framework 流行的有 vue、react、angular
我覺得用jquery就很好用了

2018年6月26日 星期二

【Redis】什麼是 Redis?

Redis 是一種快速、開放原始碼的記憶體內鍵值資料結構存放區。
Redis 隨附一組多功能的記憶體內資料結構,讓您能夠輕鬆地建立各種自訂應用程式

與資料存放在磁碟或 SSD 的大多數資料庫管理系統不同,
所有 Redis 資料都位於自己的伺服器主記憶體。
因為不需要存取磁碟,像 Redis 這樣的記憶體內資料庫可避免尋找時間延遲,
還可以透過使用較少 CPU 指示的較簡單演算法存取資料。
通常操作都可在一毫秒內完成。

大流量的處理適合使用

https://aws.amazon.com/tw/elasticache/what-is-redis/

https://www.ithome.com.tw/news/119974

【PHP】為什麼大家不用 Session 了?

1.負載平衡 Session不好處理,用token後台可以支援多個平台(web、APP)
2.防止跨網域請求偽造攻擊(CSRF),每次請求都要先獲得token,只有連結不能執行

產生 token
https://blog.7311.tw/2013/12/php-token.html

https://yami.io/jwt/

【jquery】bind、live、on

bind必需要每一個HtmlElement都要綁定,而live不用,
live適合用在動態新增element,如Ajax下載回來的HTML,
用live其中相同的selector的HtmlElement,就不用重Bind,
可以省去不少麻煩。

//在 jQuery 1.3 以上版本
$(selector).live(events, data, handler);
//在 jQuery 1.4.3 以上版本
$(document).delegate(selector, events, data, handler);
//在 jQuery 1.7 以上版本
$(document).on(events, selector, data, handler);

$(":input").bind("keyup change", function(e) {
    // do stuff!
})
 $("#myform").on("change","input",save_complete);
 $("#myform").on("change","select",save_complete);
 $("#myform").on("click",".del_score",del_score);


https://dotblogs.com.tw/wadehuang36/2010/10/13/jquery-bind-live

【javascript】event.preventDefault() 與 event.stopPropagation()

javascript 要停止執行程式可以用 event.preventDefault() 與 event.stopPropagation()

stopPropagation 可阻止冒泡事件發生

差別:https://dotblogs.com.tw/harry/2016/09/10/131956
https://www.cnblogs.com/jiqing9006/archive/2012/09/11/2679831.html

2018年6月25日 星期一

【AnyDesk】鍵盤設置

如果要用AnyDesk寫程式,
記得要把【設定】裡面的【系統轉換按鍵】取消!!