Feeds:
文章
迴響

Archive for the ‘網路程式設計’ Category

 
今天在修正一個錯誤時發現,如果進行字串(切割)轉陣列時,如果空字("")串對你而言是無意義的,那如果你要取得"有意義"的陣列長度就要小心。
[PHP]
$arr = explode(‘,’, “);
echo count($arr); // 1
[Javascript]
var str = “;
var arr = str.split(‘,’);
alert(arr.length); // 1
 
因為空字串會成為陣列中的第一個元素,所以,會回傳陣列長度為 1,而非預期的 0,此時就會發生隱含的錯誤…
廣告

Read Full Post »

 
<form action = ‘http://www.google.com.tw&#8217; method= ‘post’>
<div id = ‘content’>
</div>
<input type =’submit’ value = ‘send’/>
</form>
<input type = ‘button’ value = ‘add’ onclick = ‘add_click();’ />
<script type = ‘text/javascript’>
<!–//
 function add_click(){
  var content = document.getElementById(‘content’);
  var elem = document.createElement(‘input’);
  elem.setAttribute(‘type’, ‘file’);
  elem.setAttribute(‘name’, ‘upfile’);
  content.appendChild(elem);

 }
//–>
</script>

Read Full Post »

今天早上開會的時候聽到可以利用標頭檔來使IE自動啟用Client端的應用程式,因為目前office 支援開啟HTML文件,所以,可以透過標頭檔的方式來觸發client端用相對應的應用程式開啟文件,其中標頭檔的重點在於 ContentType 的設定,也就是設定傳送的文件內容格式,下面是三種常用的office 文件的 content type

內容類型

副檔名

Office軟體

application/msword

.doc

Microsoft Word

application/vnd.ms-excel

.xls

Microsoft Excel

application/vnd.ms-powerpoint

.ppt

Microsoft PowerPoint

 

下面是 PHP 的實作範例,(修改自 http://tlcheng.no-ip.com/Paper/RunPC/132/Office.htm  ASP.Net 範例,對ASP.NEt有興趣的可以參考此篇文章):


<?php
 $content = <<< BOF
 <table cellspacing="1" cellpadding="1" width="100%" border="1">        
  <tr>
   <th>欄0</th>
   <th>欄1</th>
   <th>欄2</th>
  </tr>        
  <tr>
   <th>列1</th>
   <td style="color: yellow; background-color: green">1,1</td>
   <td>1,2</td>
  </tr>        
  <tr> 
   <th>列2</th>
   <td>2,1</td>           
   <td style="font-size: 32px; font-style: italic; font-family: ‘bauhaus 93’">2,2</td>
  </tr>     
 </table>  
BOF;

 if (isset($_GET[‘contenttype’]) && isset($_GET[‘ext’])) { 
  $filename = ‘office.’.$_GET[‘ext’];   
  header("Content-type: {$_GET[‘contenttype’]}n");
  header("Content-Disposition: filename={$filename}n"); 
  echo $content;  
  exit();
 }
?>
<html>
 <head>
 <title>測試</title>     
 <meta http-equiv="content-type" content="text/html; charset=big5">     
 <meta name="vs_targetschema" content="http://schemas.microsoft.com/intellisense/ie5">  
 </head>  
 
 <body bottommargin="0" leftmargin="0" topmargin="0" rightmargin="0">     
 <?php
  echo $content;
 ?>
 <p>輸出格式         
 <a href="<?php echo $PHP_SELF;?>?ext=doc&contenttype=application/msword" target = ‘office’>word</a>         
 <a href="<?php echo $PHP_SELF;?>?ext=xls&contenttype=application/vnd.ms-excel" target = ‘office’>excel</a>         
 <a href="<?php echo $PHP_SELF;?>?ext=ppt&contenttype=application/vnd.ms-powerpoint" target = ‘office’>powerpoint</a>     
 </p>  
</body></html>


上述參考網頁中還有描述到一個相當好用的技巧:"樣板",如果PHP要實作該功能也相當的容易,假如我的樣本檔案doc_pattern.htm 的內文為

作者:(key:author)
開發環境:(key:enviroment)

 

php 程式碼如下:

<?php 
 if (isset($_GET[‘contenttype’]) && isset($_GET[‘ext’])) { 
  $filename = ‘doc_pattern.htm’;
  $searchs = array(‘(key:author)’, ‘(key:enviroment)’);
  $replaces = array(‘chui-wen chiu’, ‘linux+php’);
  $content = str_replace($searchs, $replaces , file_get_contents($filename));

  $filename = ‘office.’.$_GET[‘ext’];   
  header("Content-type: {$_GET[‘contenttype’]}n");
  header("Content-Disposition: filename={$filename}n"); 
  echo $content;  
  exit();
 }
?>
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=big5">     
</head>  
 
<body bottommargin="0" leftmargin="0" topmargin="0" rightmargin="0">     
 <p>輸出格式         
 <a href="<?php echo $PHP_SELF;?>?ext=doc&contenttype=application/msword" target = ‘office’>word</a>          
 </p>  
</body>
</html>

 

Read Full Post »

假如要以 @ 和 . 為分隔字元,已前我可能會透過迴圈或先經過字元代換後來處理,可使今天學到,原來用正規表示法做字串分割是多麼的優美,如下
$email = ‘a@xyz.net.tw’;
print_r( preg_split(‘/[@.]/’, $email) );
 
執行結果如下:
Array ( [0] => a [1] => xyz [2] => net [3] => tw )

Read Full Post »

繼 <marquee> 標籤之後,終於用 <div> + css 實作出一個小區塊中塞入一堆資料,而且有捲軸,其實只要再完成兩個步驟即可達成:
1. 在資料的前後加上 <div>…</div> 標籤
2. 給予 <div> 標籤的 css 屬性 overflow: auto; height: 200px;
ps. overflow 是資料超出邊界時的處理方式,auto表示自動出現捲軸, height 則是用來指定區域的高度
 
下面是一個簡單的範例:
<div style = ‘overflow: auto; height: 200px;’>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
fdsaaaaaaaaaaaaaa<br>
</div>

效果展示如下

fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa
fdsaaaaaaaaaaaaaa

Read Full Post »

為了實作工作上的小功能,寫了簡單的搜尋功能,如下
 var arr = [‘a1’, ‘a2’, ‘a3’, ‘aa’];
 // 二分搜尋法
 Array.prototype.bsearch = function(v, compare_func){
  function compare_def(a,b){
   return a==b?0:a<b?-1:1;
  };
  if (compare_func == null){
   compare_func = compare_def;
  }
  var lbound = 0;
  var rbound = this.length-1;
  var mid;
  while(lbound<=rbound){
   //alert(lbound + ‘/’ + mid + ‘/’ + rbound);
   mid = Math.floor((lbound+rbound)/2);
   //alert(compare_func(this[mid], v));
   switch(compare_func(this[mid], v)){
   case 0:
    return mid;
   case 1:
    rbound = mid – 1;
    break;
   case -1:
    lbound = mid + 1;
    break;
   }
  }
  return null;
 };
 alert(arr.bsearch(103));
 alert(arr.bsearch(‘aa’));
 alert(arr.bsearch(‘a1’));

Read Full Post »

最近專案需求需要將一堆最新消息的資料塞到一個區塊中顯示,並每兩條訊息以不同的背景顏色區分,以我淺薄的專業知識只知道使用<iframe>和<select>來實作,可惜<iframe>的實作效果不佳,<select>對於字串太長不會出現水平捲軸,也不是一個良好的解決方案,後來同事提供用<div>+css來實作,不過這部分我尚未測試,另一個同事提供了<marquee>+<table>解法,以下就是該標籤的簡單範例

<marquee behavior="scroll" direction="up" vspace="0" width="100%" height="200px" scrollamount="2" scrolldelay="80" onMouseOver=’this.stop()’ onMouseOut=’this.start()’ name="news">
 <table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0" >
  <tr valign="top" align="left" class="a3">
   <td valign="top">‧</td>
   <td valign="top" >   
    訊息#1
   </td>
  </tr>
  <tr valign="top" align="left" class="a3">
   <td valign="top">‧</td>
   <td valign="top" >   
    訊息#2
   </td>
  </tr>
 </table>
</marquee>     

marquee 標籤的重要屬性:
1. behavior: 捲動方式
  = side: 捲動到結束即停止
  = scroll: 循環捲動
  = alternate: 來回捲動
2. direction: 捲動方向
  = left
  = right
  = up
  = down  
3. scrollamount: 一次捲動的量
4. truespeed:
5. scrolldelay: 捲動延遲時間
6. loop: 捲動次數

事件:
onfinish: 捲動完成時

其他詳細資訊可以參考 MSDN(http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/marquee.asp)

Read Full Post »

Older Posts »