2015年10月14日 星期三

PHP 進行斷字還是用 mb_ 開頭的好?! (substr v.s mb_substr)

我們常在什麼 XX 列表上,有時候因為一行文字過長,所以會有想把文字做截斷的動作,比方說 『i love you so much, do you know』,假設這段文字剛好擺進 div 時就是會過長,所以我想要把他截斷成 『i love you so much, do...』,最後還故意加了 ... 來表示。

假設這個問題只會發生在單行文字,那我會建議你用 css  的 ellipsis 解決掉,因為單行的段字做 ... 結尾用 css 蠻快的,但是發生在兩行或三行是就不能用 css 了。

這裏有一段很簡陋的程式碼,用意是每一筆 title 我都會判斷它的長度是否超過我認為的最常的可能性 (目前看起來是我希望他不要超過 39 個字),過長我就會用 substr 把它截斷,從第 0 個位子截到 39,最後補上 ... 字串:


不過很可惜這樣的做法有問題,我假設我存在資料庫的字串都是正確的字符編碼,可是經過這個 substr 截出來的字串,卻讓我得 � 奇怪的詭異符號,為什麼?!

經 google 發現原來 substr 算的是 bytes 而不是 characters,取而代之的是,如果你使用 mb_ 開頭的 function,可以額外處理 multi-byte encodings 的部分。

後來我用 mb_substr 將以上的程式碼改寫了一下: (要注意 function 的參數跟 substr 數量不太一樣)



每次在追這種怪問題都覺得心疲,但是得到解答後就覺得好多了

這個需求讓我想到以前工作的一些經驗,因為英文字跟中文字算出來的大概要擷取的數量是不一樣的,所以... 挺麻煩的。有時候 不要為了一些沒必要的堅持而堅持。

如果還有什麼不瞭解的地方可以 google substr vs mb_substr。

只是我還是不知道,到底在什麼情況下,我們會只用 substr ?


2015年10月13日 星期二

Rails Girls Weekly - JavaScript Basic For 6 Weeks(5/6)


剛剛上完了第五週的課程 jQuery 基礎,其實是真的非常基礎 :P 花了一個多小時帶一下。另外也有提到 Framework 跟 library 是不一樣的概念,如果想學 jQuery,把 css selector 弄懂很重要,如果你是初學者,可以學習以下兩個網站為開端:


http://flukeout.github.io/
https://www.codecademy.com/en/tracks/jquery

2015年10月12日 星期一

[隨筆] 用 css mask-image 做遮罩

晚上剛好幫我朋友看一個 colorbox 的問題,起初我以為只是一個改改 css  border-radius 就好的問題,沒想到弄到最後竟然去找 mask-image 的方法。

情況是他希望在 colorbox 打開時,四邊都維持某種程度的 border-radius,但是在 colorbox 的 iframe 裡面,當你 scroll 時,border-radius 就失效了,其實不是失效,而是裡面的 div 的背景色本來就存在於那個區域,所以 content 是滿的沒有錯

廢話不多說,我只能講最後我用了這個方法,他使用了 mask-image 的方式去做遮罩的概念,在 colorbox 那一個 iframe 做這層,就可以一直 mask 四邊都有 border-radius 的效果:  How to make CSS3 rounded corners hide overflow in Chrome/Opera




改完之後不管裡面怎麼捲,都能維持外框有 border-radius 的情況:


太久沒有好好研究 css,已經退化到這種程度也真是一種悲哀。
因為 colorbox 一直都是網頁製作 popup/lightbox 當紅炸子雞的套件,所以我還是記一下,以防以後有需要用到又忘了。

2015年10月9日 星期五

Rails Girls Weekly - JavaScript Basic For 6 Weeks(4/6)

昨天本來要發文,但是想說早上還要去參加 phpconf 2015 所以就早早睡了 :P

week4 講了基礎的 array, object 怎麼定義,還有 JSON,雖然講到 JSON 有點難了..sorry。
因為加了一小時講一點怎麼 commit 到 github,所以昨天有兩個 slide,只是最後 live demo 的時候沒有成功,不知道網路還是 github 怎麼了,有點可惜就是.. 下次我還是不要嘗試做這種 live demo 的事好了 QQ

老實說簡報都很基本,但是還是要看個人的接受程度,也有有些人會覺得很難,只是有些事情,就算當下的聽眾不能接受,我還是必須說一下,主要是因為這些都是"定義",該描述出來的事情還是得說一下...。

2015年10月7日 星期三

git 反悔 commit,想要 rollback 恢復回到上一次的 commit

最近在工作上偶爾需要這個功能...,就是一直去 merge 別人的 branch,結果上一次 merge 的結果是有問題的,就會想要還原之前的版本,模擬的情境像這樣 (圖中的 SHA1 都是假造):

假設我有一個 branch 叫 winwu,這是我每次 commit 倒數幾個的歷程:



由於最後一次 commit (紅色那顆 ew3354) 其實是有問題的,所以我希望退回到 2Tefw88 那個 commit:



指令是:
git reset --hard 2Tefw88
git push origin winwu --force

簡化的表達方式是:
1. 首先 reset -hard 先“強制”回到某次 commit
git reset --hard 要 Rollback 的 commit SHA1
(有 --hard 也有 --soft,用法我沒有提到,可以自己去查查看 :P)

2. 接著重新 push 到你想要 push 的 branch,記住一定要有 force,否則 commit 不上去哦...
git push origin BRANCH 名稱 --force


參考文章:
Git 版本控制:利用 git reset 恢復檔案、暫存狀態、commit 訊息 - appleboy
http://stackoverflow.com/questions/927358/how-do-you-undo-the-last-commit
http://git-scm.com/docs/git-reset


2015年10月6日 星期二

2015 南投集集亂走亂逛兩天一夜


這個週末因為朋友要去南投參加衝小鎮的活動,所以身為他的朋友跟朋友們也都一起跟去了 (講義氣 XD),不過沒有特別安排什麼行程,就只是當做出門踏青,隨意走走而已。

交通
去程:  (高鐵)臺北->台中新烏日(700多),然後從新烏日搭電車到二水,再直接換月台轉搭到集集的區間車。時間要對準,因為二水到集集的區間車沒有很多,如果錯過一班,可能下一班要 1-2 小時才有。

回程: 區間車從集集到二水,再從二水搭自強回台北 (487元)。

Rails Girls Weekly - JavaScript Basic For 6 Weeks(3/6)

PPT


本來今天的課程是上週的,只是剛好遇到颱風,所以延到今天:P
week3 講的是基本的 event 跟 function
其實真的要細講,都不是一兩小時能帶過的,如果大家覺得這份簡報,有什麼很基礎而我沒有提到的部分,也歡迎讓我知道,這樣有朝一日還要分享基礎 javascript 才有機會改進呀 !

謝謝來上課的朋友們,如果有什麼做不好的地方,直接反應吧! :)

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...