解決 ie8 window.location.origin undefined 問題

window.location.origin
蠻好用的在js中可以取網址的這一段 =>  http://sub.domain.com
但ie8似乎不支援,往路上找到個解決方法,成功解了這問題
if (!window.location.origin) {
  window.location.origin = window.location.protocol + “//” + window.location.hostname + (window.location.port ? ‘:’ + window.location.port: ”);
}
原文
http://tosbourn.com/a-fix-for-window-location-origin-in-internet-explorer/

[……]

閱讀更多

CSS Google Fronts 強大的Googe大神,居然還有推出字型的服務

天呀!!我今天才發現,強大的Googe大神,居然也有提供字型的服務,
這對於做網站設計真的是增加非常多的彈性,Google倒了該怎麼辦呀呀呀呀!!!!

Google Fronts
https://www.google.com/fonts

可以一次加入多種字型
還可以選擇多種字體樣式
並且右方能告訴你載入的速度

還教你如何使用你選擇的字型,可說是非常大心,
提供三種使用的方式:
1.HTML LINK 標籤載入。
2.CSS @import 方式載入。
3.Javascript 方式載入。

[……]

閱讀更多

CSS 載入字型

以前一直有個觀念是網頁只能用系統字型,

今天看了一下國外網站,為什麼字型這麼豐富,
我就偷看了一下CSS檔,原來可以載入字型,
打破我舊有的觀念,在版型設計上相信可以更彈性的運用,
語法如下:

@font-face {
    font-family: myFirstFont;
    src: url(sansation_bold.woff);
    font-weight: bold;
}

其他運用

@font-face {
font-family: Lato;
src: local(“Lato Regular”), local(“Lato-Regular”), url(https://fonts.gstatic.com/s/lato/v11/nQhiC-wSiJx0pvEuJl8d8A.eot) format(“embedded-opentype”), url(https://fonts.gstatic.com/s/lato/v11/9k-RPmcnxYEPm8CNFsH2gg.woff) format(“woff”);
font-weight: 400;
font-style: normal;

}

相關網址
https://vector.cool/css-load-font/
http://www.w3schools.com/cssref/css3_pr_font-face_rule.asp

不過,
我想中文字型如果非必要,還是別了吧,因為中文字型檔通常很大,
雖然沒實際測過,但我相信一定會影響載入速度

[……]

閱讀更多

jQuery 取網址、根目錄

suppose that you have a page with this address: http://sub.domain.com/page.htm. use the following in page code to achive those results:
  • window.location.host : you’ll get sub.domain.com:8080 or sub.domain.com:80
  • window.location.hostname : you’ll get sub.domain.com
  • window.location.protocol : you’ll get http:
  • window.location.port : you’ll get 8080 or 80
  • window.location.origin : you’ll get http://sub.domain.com *
Update: about the .origin
* As the ref states, browser compatibility for window.location.origin is not clear. I’ve checked it in chrome and it returned http://sub.domain.com:port.
出處
http://stackoverflow.com/questions/1368264/get-host-name-in-javascript

[……]

閱讀更多

PHP.INI的安全性設定參考

php.ini的安全性設定參考
safe_mode = on
限制system, exec等系統執行的能力,限制某些function只能處理與自己同一個UID的檔案。
safe_mode受限制的功能請參考http://tw2.php.net/manual/en/features.safe-mode.functions.php
因為mail()的第五個參數有漏洞,可突破safe_mode的限制,執行系統命令,最好disable,以SMTP的方式替代寄信。
register_globals = off
allow_url_fopen = Off (很重要的設定)
allow_url_fopen 打開的時候, 如果有人傳入一個參數為 xxx=http://xxx/xxx 之類的東西,
如果這個 php 的程式, 沒有檢查這個變數, 或是 register_globals 是開啟的情形下, 也許會造成這個 php 使用
include() 去把遠端那個 URL 的檔案給引入執行…. 也就是執行到了別人寫的程式, 這時… 自然別人想在那裡頭做什麼,
就能夠做什麼了.
display_errors = off
盡量不要在正式上線的主機直接顯示錯誤在頁面上,以避免暴露系統資訊。如需有debug的需要則開啟log_errors = On ,並以error_log = filename指定錯誤訊息要記錄到哪個檔案。
magic_quotes_gpc = on
默認是on,但需檢查一遍
open_basedir =web目錄
盡量將網站的起路徑限制在web的路徑,並免駭客去引用web路徑以外的檔案。
disable_functions = (很重要的設定,對外的Web建議要把可以執行系統指令的functions拿掉) system,exec,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,dl,set_time_limit
非必要一定要關閉的funciton,不然駭客會利用來執行檔案來取得你的管理權限。
能的話盡量將php檔案編碼過,可避免駭客在得到你的程式後,進一步分析程式的漏洞。
盡量限制可上傳檔案的folder,其他的目錄都不要讓web server有寫入的權限。
php檔案的owner不能是root,配合safe_mode使用,可以避免駭客利用來以root身份執行命令。
fsockopen能的話也關掉,但是因為有部分套裝程式會用到,例如Horde Webmail,如果關掉fsockopen imap會連不上。

[……]

閱讀更多

PHP 正規表達式,清除隱藏字元,整齊排列輸出的字元

清除隱藏字元,整齊排列輸出的字元,
其實這並不是一個很重要的工作啦,
但如果你看到下面輸出的XML會感到很痛苦的,
那你跟我一樣有這種偏執狂

看到這樣亂七八糟真的很痛苦,
主要是因為我們在編輯程式的時候,
有些隱藏字元會被我們加在字串中,
當輸出的時候就會一起被輸出,
比較長見的隱藏字元 n r t 就是造成這些很怪縮排的兇手,
我們可以透過正規表達式把這些字元取代,
第二個參數空白就是刪除,
echo preg_replace(‘/[nrt]/’, ‘ ‘, $xml);

不過這樣好像太乾淨了齁,
修改一下不要拿掉斷行n,

echo preg_replace(‘/[rt]/’, ‘ ‘, $xml);

哇屋~是不是舒服多了。

[……]

閱讀更多

PHP simplexml to Array XML 轉 Array

引用網址
https://gist.github.com/tfnet/2037443

PHP 使用 simplexml_load_string() 解析 XML 資料,
要一直 $node->children() 一個節點一個節點的取,這樣用實在很麻煩,
如果能一次把 XML 結構資料轉成 Array 在讀裡面的資料就非常好用了,
網路查了一下看到神人分享的function,完全用原本的XML結構打造成Array,非常好用,
該網址提供的程式碼較適用於Class中,我做了一點小小的修改,
原版本請連文章上方引用網址,修改後版本請於文章下方 Download

<?php
/**
 * Converts a simpleXML element into an array. Preserves attributes.<br/>
 * You can choose to get your elements either flattened, or stored in a custom
 * index that you define.<br/>
 * For example, for a given element
 * <code>
 * <field name=”someName” type=”someType”/>
 * </code>
 * <br>
 * if you choose to flatten attributes, you would get:
 * <code>
 * $array[‘field’][‘name’] = ‘someName’;
 * $array[‘field’][‘type’] = ‘someType’;
 * </code>
 * If you choose not to flatten, you get:
 * <code>
 * $array[‘field’][‘@attributes’][‘name’] = ‘someName’;
 * </code>
 * <br>__________________________________________________________<br>
 * Repeating fields are stored in indexed arrays. so for a markup such as:
 * <code>
 * <parent>
 *     <child>a</child>
 *     <child>b</child>
 *     <child>c</child>
 * …
 * </code>
 * you array would be:
 * <code>
 * $array[‘parent’][‘child’][0] = ‘a’;
 * $array[‘parent’][‘child’][1] = ‘b’;
 * …And so on.
 * </code>
 * @param simpleXMLElement    $xml            the XML to convert
 * @param boolean|string    $attributesKey    if you pass TRUE, all values will be
 *                                            stored under an ‘@attributes’ index.
 *                                            Note that you can also pass a string
 *                                            to change the default index.<br/>
 *                                            defaults to null.
 * @param boolean|string    $childrenKey    if you pass TRUE, all values will be
 *                                            stored under an ‘@children’ index.
 *                                            Note that you can also pass a string
 *                                            to change the default index.<br/>
 *                                            defaults to null.
 * @param boolean|string    $valueKey        if you pass TRUE, all values will be
 *                                            stored under an ‘@values’ index. Note
 *                                            that you can also pass a string to
 *                                            change the default index.<br/>
 *                                            defaults to null.
 *
 * @return array the resulting array.
 */
function simpleXMLToArray($xml,$attributesKey=NULL,$childrenKey=NULL,$valueKey=NULL)
{

if($childrenKey && !is_string($childrenKey)){
$childrenKey = ‘@children’;
}
if($attributesKey && !is_string($attributesKey)){
$attributesKey = ‘@attributes’;
}
if($valueKey && !is_string($valueKey)){
$valueKey = ‘@values’;
}

$return = array();
$name = $xml->getName();
$_value = trim((string)$xml);
if(!strlen($_value)){
$_value = null;
};

if($_value!==null){
if($valueKey){
$return[$valueKey] = $_value;
}
else{$return = $_value;
}
}

$children = array();
$first = true;
foreach($xml->children() as $elementName =&g[……]

閱讀更多

PHP POST RAW 使用 cURL

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,            “http://yourdomain.com.tw” );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_HTTPHEADER,     array(‘Content-Type: text/plain’)); 
curl_setopt($ch, CURLOPT_POSTFIELDS,     “POST RAW 資料” ); 


$result=curl_exec ($ch);


引用資料

RAW POST using cURL in PHP
http://stackoverflow.com/questions/871431/raw-post-using-curl-in-php

[……]

閱讀更多