<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="http://blog.teatime.com.tw/styles/rss.css" type="text/css"?>
<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
  xmlns="http://my.netscape.com/rdf/simple/0.9/"
>

 <channel>
  <title>Tommy 碎碎念</title>
  <link>http://blog.teatime.com.tw/1</link>
  <description>&lt;p&gt;Tommy Wu&#039;s blog&lt;/p&gt;
</description>
 </channel>
    <item>
   <title>SPBW2S2U2 讓 S2U2 可以使用 SPB Weather 2 的天氣資料</title>
   <description>&lt;p&gt;&lt;a href=&quot;http://s2u2.ac-s2.com/&quot; target=&quot;_blank&quot;&gt;S2U2&lt;/a&gt; 對於 &lt;a href=&quot;http://www.spbsoftwarehouse.com/products/weather/?en&quot; target=&quot;_blank&quot;&gt;SPB Weather&lt;/a&gt; 的支援只有到 1.x&amp;nbsp;的版本.&amp;nbsp;而 SPB&amp;nbsp;的討論區裡頭雖然有說到要支援 S2U2,&amp;nbsp;不過...&amp;nbsp;也不知道什麼時候才會支援.&amp;nbsp;所以...&amp;nbsp;我就動手寫了這個小程式來使用.&lt;/p&gt;&lt;p&gt;檔案放在 &lt;a href=&quot;http://www.teatime.com.tw/~tommy/files/SPBW2S2U2.7z&quot; target=&quot;_blank&quot;&gt;http://www.teatime.com.tw/~tommy/files/SPBW2S2U2.7z&lt;/a&gt; 　&lt;/p&gt;&lt;p&gt;首先... 你的 S2U2 必須在天氣插件那兒設定為 UserWeather, 然後執行 SPBW2S2U2.exe&amp;nbsp;就可以了.&amp;nbsp;你可以把 SPBW2S2U2.exe 放到 Windows\啟動 的目錄下, 每次開機自動執行就可以. 如果要離開程式, 只要再執行一次就可以.&lt;/p&gt;&lt;p&gt;程式只在 Samsung i8000 的 Windows Mobile 6.1 中測試過, 不保證不會有問題. 用的人自己小心吧, 
本人對使用本程式造成的任何損失均不負責. &lt;/p&gt;&lt;p&gt;程式碼附在裡頭, 要修改的可以自行修改. 至於授權方式? 就當是 public domain 的東西吧, 本人放棄所有權利, 
你高興怎麼用這程式或程式碼都可以.&amp;nbsp; &lt;/p&gt;&lt;p&gt;至於 SPBW2S2U2 的參數, 是放在 HKCU\Software\TeaTime\SPBW2S2U2 底下:&lt;br /&gt;&lt;br /&gt;Debug (DWORD):&lt;br /&gt;預設值為 0.&lt;br /&gt;如果是非 0 的值, 會產生 \SPBW2S2U2_log.txt 的記錄檔, 以方便除錯.&lt;br /&gt;&lt;br /&gt;UseCelsius (DWORD):&lt;br /&gt;預設值為 1.&lt;br /&gt;0 表示使用華氏, 非 0 表示使用攝氏.&lt;br /&gt;&lt;br /&gt;DeleteCacheFile (DWORD):&lt;br /&gt;預設值為 1.&lt;br /&gt;非 0 的值會在讀取 SPB Weather 2 的 Cache 檔案後, 把該檔案刪除.&lt;br /&gt;&lt;br /&gt;WaitAfterChanged (DWORD):&lt;br /&gt;預設值為 10.&lt;br /&gt;在偵測到 SPB Weather 2 的 Cache 目錄有更改時, 要暫停的秒數.&lt;br /&gt;&lt;br /&gt;CheckInterval (DWORD):&lt;br /&gt;預設值為 0.&lt;br /&gt;如果你的 SPB Weather 2 並不會自動更新 (好像沒有執行時就不會自動更新?), 可以利用這個參數, 讓 SPBW2S2U2 自動透過 internet 去讀取資料來更新 (必須在已經有 internet 連線的情況下). SPBW2S2U2 會在這個設定的秒數之後, 檢查是否有網路連線, 然後去更新資料.&lt;br /&gt;&lt;br /&gt;CheckConnectionTimeout (DWORD):&lt;br /&gt;預設值為 5.&lt;br /&gt;檢查是否有 internet 連線的秒數.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;2009/11/08: &lt;br /&gt;&lt;p&gt;更新一下程式, 修正無法刪除自動抓取的暫存檔案所造成自動更新只有第一次有作用的問題.&lt;br /&gt;之前有抓過的請自己重抓吧.&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;2009/11/08 13:33:13:&lt;p&gt;更新一下程式,&amp;nbsp;自動更新時,&amp;nbsp;強迫系統重新抓取檔案, 不要使用快取的資料.&lt;br /&gt;之前有抓過的請自己重抓吧.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;hr width=&quot;100%&quot; size=&quot;2&quot; /&gt;2009/11/09&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果需要 .cab 的安裝檔, 可以到這兒抓: &lt;a href=&quot;http://www.teatime.com.tw/~tommy/files/SPBW2S2U2.CAB&quot; target=&quot;_blank&quot;&gt;http://www.teatime.com.tw/~tommy/files/SPBW2S2U2.CAB&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/331</link>
      <pubDate>Sat, 07 Nov 2009 23:27:12 +0800</pubDate>   
  </item>
    <item>
   <title>取消 Windows Mobile 來電鈴聲延遲 3 秒的問題</title>
   <description>&lt;p&gt;最近換了一隻 Windows Mobile&amp;nbsp;的手機,&amp;nbsp;發現來電鈴聲會延遲3秒才開始響起.&amp;nbsp;雖然網路上有找到一些文章,&amp;nbsp;只要去修改 HKCU\ControlPanel\Sounds\RingTone0\Script&amp;nbsp;的值,&amp;nbsp;把裡頭的 w3&amp;nbsp;移除就可以.&amp;nbsp;不過...&amp;nbsp;每次修改設定就必需要再修改一次.&amp;nbsp;所以...&amp;nbsp;就動手寫了這個小程式來處理.&lt;/p&gt;&lt;p&gt;檔案放在 &lt;a href=&quot;http://www.teatime.com.tw/~tommy/files/RingDelayRemover.7z&quot; target=&quot;_blank&quot;&gt;http://www.teatime.com.tw/~tommy/files/RingDelayRemover.7z&lt;/a&gt; &lt;/p&gt;&lt;p&gt;只要把 RingDelayRemover.exe 放到 Windows\啟動 的目錄下, 每次開機自動執行就可以. 如果要離開程式, 只要再執行一次就可以.&lt;/p&gt;&lt;p&gt;這個程式只是用來監看上頭的 key 值, 如果有任何更改就會把 w3 (只要是 wN 都會移除) 移除, 就不用每次都要手動去改了.&lt;/p&gt;&lt;p&gt;程式只在 Samsung i8000 的 Windows Mobile 6.1 中測試過, 不保證不會有問題. 用的人自己小心吧, 本人對使用本程式造成的任何損失均不負責.&lt;/p&gt;&lt;p&gt;程式碼附在裡頭, 要修改的可以自行修改. 至於授權方式? 就當是 public domain 的東西吧, 本人放棄所有權利, 你高興怎麼用這程式或程式碼都可以. &lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/330</link>
      <pubDate>Sun, 25 Oct 2009 13:34:32 +0800</pubDate>   
  </item>
    <item>
   <title>修正這兩天 phpmsnclass 無法正常使用 MSNP15 的問題</title>
   <description>&lt;p&gt;似乎由 7/21 開始, MS 的 server 伺服有些更改, 在 MSNP15 的使用上, 並不會在 USR 指令登入之後送出 SBS 的指令, 這會造成 &lt;a href=&quot;http://code.google.com/p/phpmsnclass/&quot; target=&quot;_blank&quot;&gt;phpmsnclass&lt;/a&gt;  在登入後等待 SBS 的指令而無後續的動作.&lt;/p&gt;&lt;p&gt;所以目前把程式修改一下, 直接在 USR 回應後就處理後續的動作, 不再依靠 SBS 指令處理.&lt;/p&gt;&lt;p&gt;改了之後看起來是正常了. 有使用的朋友, 請更新到 r38 或之後的版本.&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/328</link>
      <pubDate>Sat, 25 Jul 2009 13:46:13 +0800</pubDate>   
  </item>
    <item>
   <title>修正在 FPDF UTF-8 簡繁中文支援裡頭, AliasNbPages 沒有作用的問題</title>
   <description>&lt;p&gt;在之前有提過有人寫了一個 &lt;a href=&quot;http://blog.teatime.com.tw/1/post/268&quot; target=&quot;_blank&quot;&gt;FPDF UTF-8 簡繁中文支援&lt;/a&gt;的方案 (作者不是我), 不過, 有使用者反應會造成 AliasNbPages 沒有作用. 剛剛 trace 了一下, 發現在 chinese-unicode.php 裡頭, 就直接把字串轉成 unicode 內碼的十六進位字串了, 所以後來原本的 FPDF 在轉換 AliasNbPages 這個變數時, 自然不會有任何的作用.&lt;/p&gt;&lt;p&gt;舉例來說, 一般內定的 AliasNbPages 是用 {nb} 這個字串, 會變成 007b006e0062007d 的內容, 而在原本的 FPDF 依然是找 {nb}, 自然不會轉換. 因此我們需要針對 chinese-unicode.php 來特別處理這個部份.&lt;/p&gt;&lt;p&gt;你可以在 chinese-unicode.php 的 function PDF_Unicode() 之後,&amp;nbsp; 加上一個 function Uni_putpages() 如下:&lt;/p&gt;&lt;pre class=&quot;php&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Uni_putpages&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;!&lt;/span&gt;&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;AliasNbPages&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;co1&quot;&gt;//Replace number of pages&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;        &lt;span class=&quot;co1&quot;&gt;// find the pages alias already converted to hex string&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;re0&quot;&gt;$search&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;re0&quot;&gt;$len&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;AliasNbPages&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$len&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;re0&quot;&gt;$search&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/sprintf&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;sprintf&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;%04x&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/ord&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;ord&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;AliasNbPages&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;        &lt;span class=&quot;co1&quot;&gt;// replace the pages alias with page number (hex format)&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;re0&quot;&gt;$replace&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;re0&quot;&gt;$total_pages&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;page&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;re0&quot;&gt;$len&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$total_pages&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$len&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;re0&quot;&gt;$replace&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;.=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/sprintf&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;sprintf&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;%04x&amp;quot;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;a href=&quot;http://www.php.net/ord&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;ord&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$total_pages&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;        &lt;span class=&quot;co1&quot;&gt;// replace it now&lt;/span&gt;&lt;br /&gt;        &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$n&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$n&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;page&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$n&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;pages&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$n&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$search&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$replace&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;pages&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$n&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;然後在使用時, 在最後產生 PDF 之前, 記得呼叫這個 function, 如:&lt;/p&gt;&lt;pre class=&quot;php&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$pdf&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Uni_putpages&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$pdf&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;me1&quot;&gt;Output&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;這樣子應該就可以把頁數轉換出來了.&lt;/p&gt;&lt;p&gt;不過這樣子的處理, 並不保證那個轉換不會造成別的問題. 以內定的 {nb} 來說, 因為只是單純比對 007b006e0062007d 來轉換, 雖然機率不大, 還是有可能會轉錯的. 如果有碰到, 還想避免這個問題, 可以考慮弄個比較複雜的 alias 來使用吧.&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/324</link>
      <pubDate>Fri, 24 Apr 2009 16:31:56 +0800</pubDate>   
  </item>
    <item>
   <title>phpmsnclass v1.9</title>
   <description>&lt;p&gt;更新 &lt;a href=&quot;http://code.google.com/p/phpmsnclass/&quot; target=&quot;_blank&quot;&gt;phpmsnclass&lt;/a&gt;  版本為 1.9.&lt;/p&gt;&lt;p&gt;異動記錄:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;修正 MSNP9 只有在除錯模式才能登入的問題. (r22, 2007/11/14)&lt;/li&gt;&lt;li&gt;修正 PHP notice 訊息: undefined offset of $aMSNUsers in &#039;XFR&#039; of doLoop(). (r23, 2007/12/21)&lt;/li&gt;&lt;li&gt;修正 MSNP15 密碼使用特殊字元的編碼問題. (r23, 2007/12/21)&lt;/li&gt;&lt;li&gt;修正密碼長度問題, 密碼只允許最長 16 個字元. (r23, 2007/12/21)&lt;/li&gt;&lt;li&gt;修正 PHP notice 訊息: preg_match(): Unknown modifier &#039;]&#039; in getOIM_maildata(). (r24, 2007/12/26)&lt;/li&gt;&lt;li&gt;修正變數名打錯的問題: $precess_file. (r25, 2008/01/01)&lt;/li&gt;&lt;li&gt;修正 Google Code Issue 11: Undefined property: $oim_send_soap on line 2872. (r26, 2008/01/09)&lt;/li&gt;&lt;li&gt;在 msnbot.php 中新增定時通知的功能. (r27, 2008/03/04)&lt;/li&gt;&lt;li&gt;新增 addContact() 函式, 主動詢問使用者是否允許加入他的聯絡清單中. (r29, 2008/03/11)&lt;/li&gt;&lt;li&gt;修正 sendOIM() 中, 可能同時產生 LockKeyChallenge 與 RequiredAuthPolicy 錯誤的問題. (r30, 2008/10/23)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;檔案請到 &lt;a href=&quot;http://code.google.com/p/phpmsnclass/downloads/list&quot; target=&quot;_blank&quot;&gt;Google Code&lt;/a&gt;  抓取.&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/311</link>
      <pubDate>Thu, 23 Oct 2008 23:24:44 +0800</pubDate>   
  </item>
    <item>
   <title>修正 Spreadsheet_Excel_Writer 的 unicode 問題</title>
   <description>&lt;p&gt;在經過&lt;a href=&quot;http://blog.teatime.com.tw/1/post/111&quot; target=&quot;_blank&quot;&gt;之前所提過的修正&lt;/a&gt;之後, 的確可以在 Excel 的欄位中正確的使用 unicode 了. 不過最近在 Study-Area &lt;a href=&quot;http://phorum.study-area.org/index.php?topic=51957.0&quot; target=&quot;_blank&quot;&gt;有人提到 Worksheet 的名稱與列印的 Header 與 Footer 都不能使用 unicode&lt;/a&gt;. 試了一下, 果然不能正確使用.&lt;/p&gt;&lt;p&gt;原本的解決方法, 當然就是這部份只用英文或數字, 來避開這個問題. 不過, 最近在 Google 上頭閒逛時, 發現&lt;a href=&quot;http://d.hatena.ne.jp/kent013/20080205/1202209327&quot; target=&quot;_blank&quot;&gt;有位日本人提到了一個解法&lt;/a&gt;, 在該網頁中說明這個修正取自&lt;a href=&quot;http://chazuke.com/?p=93&quot; target=&quot;_blank&quot;&gt;另一位日本人的 Excel_Reviser 專案&lt;/a&gt;, 不過我下載該 patch 之後, 發現不能正常的在我的環境中使用 (UTF-8). 不過... 看起來在他們的日文環境中似乎是正常的.&lt;/p&gt;&lt;p&gt;由於在目前 perl 版本的 &lt;a href=&quot;http://search.cpan.org/dist/Spreadsheet-WriteExcel/&quot; target=&quot;_blank&quot;&gt;Spreadsheet-WriteExcel&lt;/a&gt; 
 是沒有這類的問題, 而 php 的這個物件, 當初也是由 perl 版本 port 過來的, 所以就抓了最新版的 Spreadsheet-WriteExcel
 下來研究看看.&amp;nbsp; &lt;/p&gt;&lt;p&gt;後來發現這位日本人所做的 patch, 在 &lt;a href=&quot;http://www.php.net/mb_convert_encoding&quot; target=&quot;_blank&quot;&gt;mb_convert_encoding&lt;/a&gt;  並未指定原本的編碼, 我改了一下, 指定我目前用的編碼之後, 果然可以在 worksheet 的名稱上頭使用中文, 不過, 似乎有些問題, 因為用 Excel 打開時都會有檔案有問題. 經過一小段時間的 trace 之後, 發現在 _calcSheetOffsets() 裡頭會計算這個名稱的長度, 我看一下 perl 版本中, 如果是 unicode 時, 這兒應該是轉成 UTF-16LE 的字串之後, 再看看這個字串佔了幾個 bytes, 而不是字串的長度. 直接取字串的長度, 如果是用非 ascii 碼的字串時, 長度會不夠. 所以產生的 excel 檔案會有些問題. 經過了這些修正之後, 目前看起來, 似乎解決了這個問題.&lt;/p&gt;&lt;p&gt;首先, 你必須加上前面提過, 在 &lt;a href=&quot;http://pear.php.net/bugs/bug.php?id=1572&quot; target=&quot;_blank&quot;&gt;pear bug 1572&lt;/a&gt;  中 Michal Fapso 所提出的修正, 這個修正如下:&lt;/p&gt;&lt;pre class=&quot;php&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;diff -Nur Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;.orig/Writer/Workbook.php Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;/Writer/Workbook.php&lt;br /&gt;--- Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;.orig/Writer/Workbook.php  &lt;span class=&quot;nu0&quot;&gt;2005&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-11&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-08&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;11&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;32&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;52.000000000&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+0800&lt;/span&gt;&lt;br /&gt;+++ Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;/Writer/Workbook.php  &lt;span class=&quot;nu0&quot;&gt;2008&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-06&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-21&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;14&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;43&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;03.619511020&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+0800&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1294&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1294&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; @@&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_append&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt; . &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;-    &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;+   /**&lt;br /&gt;     * Calculate&lt;br /&gt;     * Handling of the SST continue blocks is complicated by the need to include an&lt;br /&gt;     * additional continuation byte depending on whether the string is split between&lt;br /&gt;@@ -1311,9 +1311,10 @@&lt;br /&gt;            8228 : Maximum Excel97 block size&lt;br /&gt;              -4 : Length of block header&lt;br /&gt;              -8 : Length of additional SST header information&lt;br /&gt;-         = 8216&lt;br /&gt;+         -8 : Arbitrary number to keep within _add_continue() limit&lt;br /&gt;+         = 8208&lt;br /&gt;         */&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;re0&quot;&gt;$continue_limit&lt;/span&gt;     = &lt;span class=&quot;nu0&quot;&gt;8216&lt;/span&gt;;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$continue_limit&lt;/span&gt;     = &lt;span class=&quot;nu0&quot;&gt;8208&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$block_length&lt;/span&gt;       = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$written&lt;/span&gt;            = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes = &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1321&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1322&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt; @@&lt;br /&gt;&amp;nbsp;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array_keys&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_keys&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_str_table&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$string&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$string_length&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$string&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+      &lt;span class=&quot;re0&quot;&gt;$headerinfo&lt;/span&gt;    = &lt;a href=&quot;http://www.php.net/unpack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;unpack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;vlength/Cencoding&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$string&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+      &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;      = &lt;span class=&quot;re0&quot;&gt;$headerinfo&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;encoding&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;;&lt;br /&gt;+      &lt;span class=&quot;re0&quot;&gt;$split_string&lt;/span&gt;  = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;             &lt;span class=&quot;co1&quot;&gt;// Block length is the total length of the strings that will be&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;co1&quot;&gt;// written out in a single SST or CONTINUE block.&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1347&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1351&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;39&lt;/span&gt; @@&lt;br /&gt;                 boundaries. Therefore, in some cases we need to reduce the&lt;br /&gt;                 amount of available&lt;br /&gt;                 */&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;+&lt;br /&gt;+        &lt;span class=&quot;co2&quot;&gt;# Only applies to Unicode strings&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt; == &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+          &lt;span class=&quot;co2&quot;&gt;# Min string + header size -1&lt;/span&gt;&lt;br /&gt;+          &lt;span class=&quot;re0&quot;&gt;$header_length&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;;&lt;br /&gt;+&lt;br /&gt;+          &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt; &amp;gt; &lt;span class=&quot;re0&quot;&gt;$header_length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;co2&quot;&gt;# String contains 3 byte header =&amp;gt; split on odd boundary&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;!&lt;span class=&quot;re0&quot;&gt;$split_string&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt; % &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; != &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt;--;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;co2&quot;&gt;# Split section without header =&amp;gt; split on even boundary&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$split_string&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt; % &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; == &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt;--;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$split_string&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;+          &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+&lt;br /&gt;&amp;nbsp;&lt;br /&gt;                 &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt; &amp;gt; &lt;span class=&quot;re0&quot;&gt;$header_length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// Write as much as possible of the string in the current block&lt;/span&gt;&lt;br /&gt;                     &lt;span class=&quot;re0&quot;&gt;$written&lt;/span&gt;      += &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// Reduce the current block length by the amount written&lt;/span&gt;&lt;br /&gt;-                    &lt;span class=&quot;re0&quot;&gt;$block_length&lt;/span&gt; -= &lt;span class=&quot;re0&quot;&gt;$continue_limit&lt;/span&gt; - &lt;span class=&quot;re0&quot;&gt;$continue&lt;/span&gt;;&lt;br /&gt;+                    &lt;span class=&quot;re0&quot;&gt;$block_length&lt;/span&gt; -= &lt;span class=&quot;re0&quot;&gt;$continue_limit&lt;/span&gt; - &lt;span class=&quot;re0&quot;&gt;$continue&lt;/span&gt; - &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// Store the max size for this block&lt;/span&gt;&lt;br /&gt;-                    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$continue_limit&lt;/span&gt;;&lt;br /&gt;+                    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$continue_limit&lt;/span&gt; - &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// If the current string was split then the next CONTINUE block&lt;/span&gt;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// should have the string continue flag (grbit) set unless the&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1398&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;13&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1425&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;19&lt;/span&gt; @@&lt;br /&gt;          This length is required to set the offsets in the BOUNDSHEET records since&lt;br /&gt;          they must be written before the SST records&lt;br /&gt;         */&lt;br /&gt;-        &lt;span class=&quot;re0&quot;&gt;$total_offset&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/array_sum&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_sum&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;-        &lt;span class=&quot;co1&quot;&gt;// SST information&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;re0&quot;&gt;$total_offset&lt;/span&gt; += &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;;&lt;br /&gt;-        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;!&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$total_offset&lt;/span&gt; += &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.php.net/count&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;count&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; * &lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// add CONTINUE headers&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$total_offset&lt;/span&gt;;&lt;br /&gt;+&lt;br /&gt;+    &lt;span class=&quot;re0&quot;&gt;$tmp_block_sizes&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+    &lt;span class=&quot;re0&quot;&gt;$tmp_block_sizes&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes;&lt;br /&gt;+&lt;br /&gt;+    &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;  = &lt;span class=&quot;nu0&quot;&gt;12&lt;/span&gt;;&lt;br /&gt;+    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;!&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$tmp_block_sizes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+      &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt; += &lt;a href=&quot;http://www.php.net/array_shift&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_shift&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$tmp_block_sizes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co2&quot;&gt;# SST&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;kw1&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;!&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$tmp_block_sizes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+      &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt; += &lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt; + &lt;a href=&quot;http://www.php.net/array_shift&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_shift&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$tmp_block_sizes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co2&quot;&gt;# CONTINUEs&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+&lt;br /&gt;+    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;@@ -1421,9 +1454,31 @@&lt;br /&gt;     function _storeSharedStringsTable()&lt;br /&gt;     {&lt;br /&gt;         $record  = 0x00fc;  // Record identifier&lt;br /&gt;+    $length  = 0x0008;  // Number of bytes to follow&lt;br /&gt;+    $total   = 0x0000;&lt;br /&gt;+&lt;br /&gt;+        // Iterate through the strings to calculate the CONTINUE block sizes&lt;br /&gt;+        $continue_limit = 8208;&lt;br /&gt;+        $block_length   = 0;&lt;br /&gt;+        $written        = 0;&lt;br /&gt;+        $continue       = 0;&lt;br /&gt;+&lt;br /&gt;         // sizes are upside down&lt;br /&gt;-        $this-&amp;gt;_block_sizes = array_reverse($this-&amp;gt;_block_sizes);&lt;br /&gt;-        $length = array_pop($this-&amp;gt;_block_sizes) + 8; // First block size plus SST information&lt;br /&gt;+    $tmp_block_sizes = $this-&amp;gt;_block_sizes;&lt;br /&gt;+//        $tmp_block_sizes = array_reverse($this-&amp;gt;_block_sizes);&lt;br /&gt;+&lt;br /&gt;+    # The SST record is required even if it contains no strings. Thus we will&lt;br /&gt;+    # always have a length&lt;br /&gt;+    #&lt;br /&gt;+    if (!empty($tmp_block_sizes)) {&lt;br /&gt;+      $length = 8 + array_shift($tmp_block_sizes);&lt;br /&gt;+    }&lt;br /&gt;+    else {&lt;br /&gt;+      # No strings&lt;br /&gt;+      $length = 8;&lt;br /&gt;+    }&lt;br /&gt;+&lt;br /&gt;+&lt;br /&gt;&amp;nbsp;&lt;br /&gt;         // Write the SST block header information&lt;br /&gt;         $header      = pack(&amp;quot;vv&amp;quot;, $record, $length);&lt;br /&gt;@@ -1431,18 +1486,14 @@&lt;br /&gt;         $this-&amp;gt;_append($header . $data);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;-        // Iterate through the strings to calculate the CONTINUE block sizes&lt;br /&gt;-        $continue_limit = 8216;&lt;br /&gt;-        $block_length   = 0;&lt;br /&gt;-        $written        = 0;&lt;br /&gt;-        $continue       = 0;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;         /* TODO: not good for performance */&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array_keys&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_keys&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_str_table&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$string&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$string_length&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$string&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;      = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// assume there are no Unicode strings&lt;/span&gt;&lt;br /&gt;+      &lt;span class=&quot;re0&quot;&gt;$headerinfo&lt;/span&gt;    = &lt;a href=&quot;http://www.php.net/unpack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;unpack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;vlength/Cencoding&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$string&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+      &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;      = &lt;span class=&quot;re0&quot;&gt;$headerinfo&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;encoding&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$split_string&lt;/span&gt;  = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;             &lt;span class=&quot;co1&quot;&gt;// Block length is the total length of the strings that will be&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1473&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1524&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;30&lt;/span&gt; @@&lt;br /&gt;&amp;nbsp;&lt;br /&gt;                 &lt;span class=&quot;co1&quot;&gt;// Unicode data should only be split on char (2 byte) boundaries.&lt;/span&gt;&lt;br /&gt;                 &lt;span class=&quot;co1&quot;&gt;// Therefore, in some cases we need to reduce the amount of available&lt;/span&gt;&lt;br /&gt;+              &lt;span class=&quot;co1&quot;&gt;// space by 1 byte to ensure the correct alignment.&lt;/span&gt;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;+&lt;br /&gt;+        &lt;span class=&quot;co1&quot;&gt;// Only applies to Unicode strings&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt; == &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+          &lt;span class=&quot;co1&quot;&gt;// Min string + header size -1&lt;/span&gt;&lt;br /&gt;+          &lt;span class=&quot;re0&quot;&gt;$header_length&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;;&lt;br /&gt;+&lt;br /&gt;+          &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt; &amp;gt; &lt;span class=&quot;re0&quot;&gt;$header_length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;co1&quot;&gt;// String contains 3 byte header =&amp;gt; split on odd boundary&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;!&lt;span class=&quot;re0&quot;&gt;$split_string&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt; % &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; != &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt;--;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;co1&quot;&gt;// Split section without header =&amp;gt; split on even boundary&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$split_string&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt; % &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt; == &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt;--;&lt;br /&gt;+              &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$split_string&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;+          &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+&lt;br /&gt;&amp;nbsp;&lt;br /&gt;                 &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt; &amp;gt; &lt;span class=&quot;re0&quot;&gt;$header_length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// Write as much as possible of the string in the current block&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1483&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1558&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; @@&lt;br /&gt;                     &lt;span class=&quot;re0&quot;&gt;$string&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/substr&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$string&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$space_remaining&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// Reduce the current block length by the amount written&lt;/span&gt;&lt;br /&gt;-                    &lt;span class=&quot;re0&quot;&gt;$block_length&lt;/span&gt; -= &lt;span class=&quot;re0&quot;&gt;$continue_limit&lt;/span&gt; - &lt;span class=&quot;re0&quot;&gt;$continue&lt;/span&gt;;&lt;br /&gt;+                    &lt;span class=&quot;re0&quot;&gt;$block_length&lt;/span&gt; -= &lt;span class=&quot;re0&quot;&gt;$continue_limit&lt;/span&gt; - &lt;span class=&quot;re0&quot;&gt;$continue&lt;/span&gt; - &lt;span class=&quot;re0&quot;&gt;$align&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// If the current string was split then the next CONTINUE block&lt;/span&gt;&lt;br /&gt;                     &lt;span class=&quot;co1&quot;&gt;// should have the string continue flag (grbit) set unless the&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1503&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1578&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt; @@&lt;br /&gt;                 &lt;span class=&quot;co1&quot;&gt;// Write the CONTINUE block header&lt;/span&gt;&lt;br /&gt;                 &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;!&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;                     &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;  = 0x003C;&lt;br /&gt;-                    &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;  = &lt;a href=&quot;http://www.php.net/array_pop&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_pop&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_block_sizes&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+                    &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;  = &lt;a href=&quot;http://www.php.net/array_shift&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array_shift&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$tmp_block_sizes&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+&lt;br /&gt;                     &lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt;  = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;vv&#039;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;                     &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$continue&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;                         &lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt; .= &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;C&#039;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;這個 patch 可以由這兒抓取: &lt;a href=&quot;http://www.teatime.com.tw/~tommy/mypatch/Spreadsheet_Excel_Writer-0.9.1-unicode-1.patch&quot; target=&quot;_blank&quot;&gt;http://www.teatime.com.tw/~tommy/mypatch/Spreadsheet_Excel_Writer-0.9.1-unicode-1.patch&lt;/a&gt; &lt;/p&gt;&lt;p&gt;經過上頭的 patch 處理之後, 可以正確的在 cell 裡頭使用 unicode 了. 接著, 再經過下面的修正:&lt;/p&gt;&lt;pre class=&quot;php&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;diff -Nur Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;.orig/Writer/Format.php Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;/Writer/Format.php&lt;br /&gt;--- Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;.orig/Writer/Format.php  &lt;span class=&quot;nu0&quot;&gt;2005&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-11&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-09&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;08&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;29&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;35.000000000&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+0800&lt;/span&gt;&lt;br /&gt;+++ Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;/Writer/Format.php  &lt;span class=&quot;nu0&quot;&gt;2008&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-06&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-21&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;14&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;46&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;35.197569488&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+0800&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-243&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+243&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;23&lt;/span&gt; @@&lt;br /&gt;     &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$_right_color&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;+    * input encoding for unicode&lt;br /&gt;+    * @var string&lt;br /&gt;+    */&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$_input_encoding&lt;/span&gt;;&lt;br /&gt;+&lt;br /&gt;+    &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;     * Constructor&lt;br /&gt;     *&lt;br /&gt;     * @access private&lt;br /&gt;     * @param integer $index the XF index for the format.&lt;br /&gt;     * @param array   $properties array with properties to be set on initialization.&lt;br /&gt;     */&lt;/span&gt;&lt;br /&gt;-    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Spreadsheet_Excel_Writer_Format&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$BIFF_version&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$index&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$properties&lt;/span&gt; =  &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; Spreadsheet_Excel_Writer_Format&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$BIFF_version&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$index&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$properties&lt;/span&gt; =  &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$input_encoding&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_xf_index       = &lt;span class=&quot;re0&quot;&gt;$index&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version   = &lt;span class=&quot;re0&quot;&gt;$BIFF_version&lt;/span&gt;;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding = &lt;a href=&quot;http://www.php.net/strtoupper&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strtoupper&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$input_encoding&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;font_index&lt;/span&gt;      = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_name      = &lt;span class=&quot;st0&quot;&gt;&#039;Arial&#039;&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_size           = &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-455&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;12&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+462&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;22&lt;/span&gt; @@&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$bCharSet&lt;/span&gt;   = &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_charset; &lt;span class=&quot;co1&quot;&gt;// Character set&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;   = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;                    &lt;span class=&quot;co1&quot;&gt;// TODO: Unicode support&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;-        &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;        = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_name&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// Length of font name&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;     = 0x31;                      &lt;span class=&quot;co1&quot;&gt;// Record identifier&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version == 0x0500&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;        = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_name&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// Length of font name&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;     = 0x0F + &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;;            &lt;span class=&quot;co1&quot;&gt;// Record length&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;elseif&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version == 0x0600&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;     = 0x10 + &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;   = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;UTF16-LE&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+                    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_name = &lt;a href=&quot;http://www.php.net/mb_convert_encoding&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_convert_encoding&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_name, &lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-16LE&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;        = &lt;a href=&quot;http://www.php.net/mb_strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_name, &lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-16LE&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;     = 0x10 + &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_name&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;        = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_font_name&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// Length of font name&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;     = 0x10 + &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;;            &lt;span class=&quot;co1&quot;&gt;// Record length&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$reserved&lt;/span&gt;   = 0x00;                &lt;span class=&quot;co1&quot;&gt;// Reserved&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$grbit&lt;/span&gt;      = 0x00;                &lt;span class=&quot;co1&quot;&gt;// Font attributes&lt;/span&gt;&lt;br /&gt;diff -Nur Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;.orig/Writer/Workbook.php Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;/Writer/Workbook.php&lt;br /&gt;--- Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;.orig/Writer/Workbook.php  &lt;span class=&quot;nu0&quot;&gt;2008&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-06&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-21&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;14&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;43&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;03.619511000&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+0800&lt;/span&gt;&lt;br /&gt;+++ Spreadsheet_Excel_Writer&lt;span class=&quot;nu0&quot;&gt;-0.9&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.1&lt;/span&gt;/Writer/Workbook.php  &lt;span class=&quot;nu0&quot;&gt;2008&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-06&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;-21&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;14&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;46&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;43.421493326&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+0800&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-172&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+172&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;12&lt;/span&gt; @@&lt;br /&gt;     &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$_string_sizeinfo_size&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;+    * input encoding for unicode sheetname&lt;br /&gt;+    * @var string&lt;br /&gt;+    */&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;kw2&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$_input_encoding&lt;/span&gt;;&lt;br /&gt;+&lt;br /&gt;+    &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;     * Class constructor&lt;br /&gt;     *&lt;br /&gt;     * @param string filename for storing the workbook. &amp;quot;-&amp;quot; for writing to stdout.&lt;br /&gt;@@ -266,14 +272,17 @@&lt;br /&gt;     * @access public&lt;br /&gt;     * @param integer $version The BIFF version&lt;br /&gt;     */&lt;/span&gt;&lt;br /&gt;-    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; setVersion&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; setVersion&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$input_encoding&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt; == &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// only accept version 8&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt; = 0x0600;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version = &lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_codepage = 0x04B0;&lt;br /&gt;             &lt;span class=&quot;co1&quot;&gt;// change BIFFwriter limit for CONTINUE records&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_limit = &lt;span class=&quot;nu0&quot;&gt;8228&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding = &lt;a href=&quot;http://www.php.net/strtoupper&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strtoupper&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$input_encoding&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_tmp_format-&amp;gt;_BIFF_version = &lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_tmp_format-&amp;gt;_input_encoding = &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_url_format-&amp;gt;_BIFF_version = &lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt;;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_parser-&amp;gt;_BIFF_version = &lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-287&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+296&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; @@&lt;br /&gt;             &lt;span class=&quot;co1&quot;&gt;// change version for all formats too&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;; &lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt; &amp;lt; &lt;span class=&quot;re0&quot;&gt;$total_formats&lt;/span&gt;; &lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;++&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;                 &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_formats&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;-&amp;gt;_BIFF_version = &lt;span class=&quot;re0&quot;&gt;$version&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_formats&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;-&amp;gt;_input_encoding = &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding;&lt;br /&gt;             &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-361&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+371&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; @@&lt;br /&gt;     */&lt;br /&gt;     &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; &amp;amp;addFormat&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$properties&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Spreadsheet_Excel_Writer_Format&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version, &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_xf_index, &lt;span class=&quot;re0&quot;&gt;$properties&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Spreadsheet_Excel_Writer_Format&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version, &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_xf_index, &lt;span class=&quot;re0&quot;&gt;$properties&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_xf_index += &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_formats&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt; = &amp;amp;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-640&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+650&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;11&lt;/span&gt; @@&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$total_worksheets&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/count&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;count&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_worksheets&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;co1&quot;&gt;// add the length of the BOUNDSHEET records&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;; &lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt; &amp;lt; &lt;span class=&quot;re0&quot;&gt;$total_worksheets&lt;/span&gt;; &lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;++&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$offset&lt;/span&gt; += &lt;span class=&quot;re0&quot;&gt;$boundsheet_length&lt;/span&gt; + &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_worksheets&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/mb_convert_encoding&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_convert_encoding&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_worksheets&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;name&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-16LE&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_worksheets&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;name&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$offset&lt;/span&gt; += &lt;span class=&quot;re0&quot;&gt;$boundsheet_length&lt;/span&gt; + &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$offset&lt;/span&gt; += &lt;span class=&quot;re0&quot;&gt;$EOF&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-940&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+954&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;26&lt;/span&gt; @@&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt; = 0x07 + &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// Number of bytes to follow&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;-&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$grbit&lt;/span&gt;     = 0x0000;                    &lt;span class=&quot;co1&quot;&gt;// Visibility and sheet type&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;       = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;        &lt;span class=&quot;co1&quot;&gt;// Length of sheet name&lt;/span&gt;&lt;br /&gt;-&lt;br /&gt;-        &lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt;    = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;vv&amp;quot;&lt;/span&gt;,  &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version == 0x0600&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;      = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Vvv&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$offset&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$grbit&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;UTF16-LE&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+                    &lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/mb_convert_encoding&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_convert_encoding&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-16LE&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;       = &lt;a href=&quot;http://www.php.net/mb_strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-16LE&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;  = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;      = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;VvCC&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$offset&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$grbit&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;       = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;      = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Vvv&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$offset&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$grbit&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;    = 0x08 + &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// Number of bytes to follow&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt; = 0x07 + &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// Number of bytes to follow&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;       = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;        &lt;span class=&quot;co1&quot;&gt;// Length of sheet name&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;      = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;VvC&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$offset&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$grbit&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+        &lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt;    = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;vv&amp;quot;&lt;/span&gt;,  &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_append&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt;.&lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;.&lt;span class=&quot;re0&quot;&gt;$sheetname&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1020&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1044&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;22&lt;/span&gt; @@&lt;br /&gt;     &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; _storeNumFormat&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$ifmt&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;    = 0x041E;                      &lt;span class=&quot;co1&quot;&gt;// Record identifier&lt;/span&gt;&lt;br /&gt;-&lt;br /&gt;+        &lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version == 0x0600&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;UTF16-LE&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+                    &lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;    = &lt;a href=&quot;http://www.php.net/mb_convert_encoding&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_convert_encoding&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-16LE&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;       = &lt;a href=&quot;http://www.php.net/mb_strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;UTF-16LE&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;       = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;             &lt;span class=&quot;co1&quot;&gt;// Length of format string&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;    = &lt;span class=&quot;nu0&quot;&gt;5&lt;/span&gt; + &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;      &lt;span class=&quot;co1&quot;&gt;// Number of bytes to follow&lt;/span&gt;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt; = 0x0;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt; = 0x1;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;elseif&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version == 0x0500&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;    = &lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt; + &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;      &lt;span class=&quot;co1&quot;&gt;// Number of bytes to follow&lt;/span&gt;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;       = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;             &lt;span class=&quot;co1&quot;&gt;// Length of format string&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;-&lt;br /&gt;-        &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;       = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;             &lt;span class=&quot;co1&quot;&gt;// Length of format string&lt;/span&gt;&lt;br /&gt;-&lt;br /&gt;+        &lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt;    = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;vv&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_BIFF_version == 0x0600&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;      = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;vvC&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$ifmt&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$cch&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1038&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1068&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; @@&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_append&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt; . &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt; . &lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;-&lt;br /&gt;+    &lt;br /&gt;     &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;     * Write DATEMODE record to indicate the date system in use (1904 or 1900).&lt;br /&gt;     *&lt;br /&gt;diff -Nur Spreadsheet_Excel_Writer-0.9.1.orig/Writer/Worksheet.php Spreadsheet_Excel_Writer-0.9.1/Writer/Worksheet.php&lt;br /&gt;--- Spreadsheet_Excel_Writer-0.9.1.orig/Writer/Worksheet.php  2006-09-27 02:17:38.000000000 +0800&lt;br /&gt;+++ Spreadsheet_Excel_Writer-0.9.1/Writer/Worksheet.php  2008-06-21 14:46:44.177486354 +0800&lt;br /&gt;@@ -1230,7 +1230,7 @@&lt;br /&gt;     */&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; _XF&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&amp;amp;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.php.net/is_object&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;is_object&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;getXfIndex&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;             &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;0x0F&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1514&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1514&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt; @@&lt;br /&gt;     */&lt;br /&gt;     &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; setInputEncoding&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-         &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt; != &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt; &amp;amp;&amp;amp; !&lt;a href=&quot;http://www.php.net/function_exists&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;function_exists&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;iconv&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-             &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;raiseError&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Using an input encoding other than UTF-16LE requires PHP support for iconv&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+         &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;!&lt;a href=&quot;http://www.php.net/function_exists&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;function_exists&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;mb_convert_encoding&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; || !&lt;a href=&quot;http://www.php.net/function_exists&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;function_exists&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;mb_strlen&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+             &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;raiseError&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;Using an input encoding requires PHP support for mb_convert_encoding() and mb_strlen()&amp;quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;          &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;-         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding = &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;;&lt;br /&gt;+         &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding = &lt;a href=&quot;http://www.php.net/strtoupper&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strtoupper&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;@@ -1537,15 +1537,11 @@&lt;br /&gt;     */&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; writeStringBIFF8&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$row&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$col&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding == &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$strlen&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/function_exists&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;function_exists&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;mb_strlen&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; ? &lt;a href=&quot;http://www.php.net/mb_strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; : &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; / &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;  = 0x1;&lt;br /&gt;-        &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;-        &lt;span class=&quot;kw1&quot;&gt;elseif&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/iconv&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;iconv&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding, &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;-            &lt;span class=&quot;re0&quot;&gt;$strlen&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/function_exists&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;function_exists&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;mb_strlen&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; ? &lt;a href=&quot;http://www.php.net/mb_strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; : &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; / &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding != &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+                &lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/mb_convert_encoding&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_convert_encoding&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_input_encoding&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+            &lt;span class=&quot;re0&quot;&gt;$strlen&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/mb_strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;mb_strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$str&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;UTF-16LE&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;             &lt;span class=&quot;re0&quot;&gt;$encoding&lt;/span&gt;  = 0x1;&lt;br /&gt;         &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;         &lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;&lt;br /&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1789&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1785&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;40&lt;/span&gt; @@&lt;br /&gt;     &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;+     * Write a formula to the specified row and column (zero indexed).&lt;br /&gt;+     * For the packed binary string representation of the formula.&lt;br /&gt;+     *&lt;br /&gt;+     * Returns  0 : normal termination&lt;br /&gt;+     *         -2 : row or column out of range&lt;br /&gt;+     *&lt;br /&gt;+     * @access public&lt;br /&gt;+     * @param integer $row     Zero indexed row&lt;br /&gt;+     * @param integer $col     Zero indexed column&lt;br /&gt;+     * @param binary  $formula The formula binary string&lt;br /&gt;+     * @param mixed   $format  The optional XF format&lt;br /&gt;+     * @return integer&lt;br /&gt;+     */&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; writeFormulaBin&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$row&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$col&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$formula&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;+    &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;    = 0x0006;     &lt;span class=&quot;co1&quot;&gt;// Record identifier&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$xf&lt;/span&gt;        = &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_XF&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$format&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// The cell format&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$num&lt;/span&gt;       = 0x00;                &lt;span class=&quot;co1&quot;&gt;// Current value of formula&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$grbit&lt;/span&gt;     = 0x03;                &lt;span class=&quot;co1&quot;&gt;// Option flags&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$unknown&lt;/span&gt;   = 0x0000;              &lt;span class=&quot;co1&quot;&gt;// Must be zero&lt;/span&gt;&lt;br /&gt;+        &lt;br /&gt;+        &lt;span class=&quot;co1&quot;&gt;// Check that row and col are valid and store max and min values&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_checkRowCol&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$row&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$col&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; == &lt;span class=&quot;kw2&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;-2&lt;/span&gt;;&lt;br /&gt;+        &lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$formlen&lt;/span&gt;    = &lt;a href=&quot;http://www.php.net/strlen&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$formula&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;    &lt;span class=&quot;co1&quot;&gt;// Length of the binary string&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;     = 0x16 + &lt;span class=&quot;re0&quot;&gt;$formlen&lt;/span&gt;;     &lt;span class=&quot;co1&quot;&gt;// Length of the record data&lt;/span&gt;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt;    = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;vv&amp;quot;&lt;/span&gt;,      &lt;span class=&quot;re0&quot;&gt;$record&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$length&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt;      = &lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;vvvdvVv&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$row&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$col&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$xf&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$num&lt;/span&gt;,&lt;br /&gt;+                          &lt;span class=&quot;re0&quot;&gt;$grbit&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$unknown&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$formlen&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+        &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;_append&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$header&lt;/span&gt; . &lt;span class=&quot;re0&quot;&gt;$data&lt;/span&gt; . &lt;span class=&quot;re0&quot;&gt;$formula&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;+        &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;+    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;br /&gt;+&lt;br /&gt;+    &lt;span class=&quot;coMULTI&quot;&gt;/**&lt;br /&gt;     * Write a hyperlink.&lt;br /&gt;     * This is comprised of two elements: the visible label and&lt;br /&gt;     * the invisible link. The visible label is the same as the link unless an&lt;br /&gt;@@ -2606,8 +2636,13 @@&lt;br /&gt;         $str      = $this-&amp;gt;_header;       // header string&lt;br /&gt;         $cch      = strlen($str);         // Length of header string&lt;br /&gt;         if ($this-&amp;gt;_BIFF_version == 0x0600) {&lt;br /&gt;-            $encoding = 0x0;                  // TODO: Unicode support&lt;br /&gt;-            $length   = 3 + $cch;             // Bytes to follow&lt;br /&gt;+            if ($this-&amp;gt;_input_encoding != &#039;UTF-16LE&#039;) &lt;br /&gt;+                $str = mb_convert_encoding($str, &amp;quot;UTF-16LE&amp;quot;, $this-&amp;gt;_input_encoding);&lt;br /&gt;+            $cch = mb_strlen($str, &amp;quot;UTF-16LE&amp;quot;);&lt;br /&gt;+            $encoding = 1;&lt;br /&gt;+            $length   = 3 + $cch * 2;             // Bytes to follow&lt;br /&gt;+            //$encoding = 0x0;                  // TODO: Unicode support&lt;br /&gt;+            //$length   = 3 + $cch;             // Bytes to follow&lt;br /&gt;         } else {&lt;br /&gt;             $length  = 1 + $cch;             // Bytes to follow&lt;br /&gt;         }&lt;br /&gt;@@ -2634,8 +2669,11 @@&lt;br /&gt;         $str      = $this-&amp;gt;_footer;       // Footer string&lt;br /&gt;         $cch      = strlen($str);         // Length of footer string&lt;br /&gt;         if ($this-&amp;gt;_BIFF_version == 0x0600) {&lt;br /&gt;-            $encoding = 0x0;                  // TODO: Unicode support&lt;br /&gt;-            $length   = 3 + $cch;             // Bytes to follow&lt;br /&gt;+            if ($this-&amp;gt;_input_encoding != &#039;UTF-16LE&#039;)&lt;br /&gt;+                $str = mb_convert_encoding($str, &amp;quot;UTF-16LE&amp;quot;, $this-&amp;gt;_input_encoding);&lt;br /&gt;+            $cch = mb_strlen($str, &amp;quot;UTF-16LE&amp;quot;);&lt;br /&gt;+            $encoding = 1;&lt;br /&gt;+            $length   = 3 + $cch * 2;             // Bytes to follow&lt;br /&gt;         } else {&lt;br /&gt;             $length  = 1 + $cch;&lt;br /&gt;         }&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;這個 patch 可以由這兒抓取: &lt;a href=&quot;http://www.teatime.com.tw/~tommy/mypatch/Spreadsheet_Excel_Writer-0.9.1-unicode-2.patch&quot; target=&quot;_blank&quot;&gt;http://www.teatime.com.tw/~tommy/mypatch/Spreadsheet_Excel_Writer-0.9.1-unicode-2.patch&lt;/a&gt; &lt;/p&gt;&lt;p&gt;經過這兩個的處理之後, 使用時只要在 setVersion 的第二個參數指定目前使用的編碼, 如下:&lt;/p&gt;&lt;pre class=&quot;php&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;kw1&quot;&gt;require_once&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;Spreadsheet/Excel/Writer.php&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$workbook&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; Spreadsheet_Excel_Writer&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$workbook&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setVersion&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;utf-8&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$worksheet&lt;/span&gt; =&amp;amp; &lt;span class=&quot;re0&quot;&gt;$workbook&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;addWorksheet&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;test 測試 1243&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$worksheet&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setInputEncoding&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;utf-8&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$x&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$y&lt;/span&gt; = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$worksheet&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$x&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$y&lt;/span&gt;++, &lt;span class=&quot;st0&quot;&gt;&#039;群組&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$worksheet&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$x&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$y&lt;/span&gt;++, &lt;span class=&quot;st0&quot;&gt;&#039;報表月份&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$worksheet&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$x&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$y&lt;/span&gt;++, &lt;span class=&quot;st0&quot;&gt;&#039;應發獎金&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$worksheet&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;hideGridLines&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$worksheet&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setHeader&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;Header 測試&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$worksheet&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setFooter&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;Footer 測試&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$workbook&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;test.xls&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;re0&quot;&gt;$workbook&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;a href=&quot;http://www.php.net/exit&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;exit&lt;/span&gt;&lt;/a&gt;;&lt;/div&gt;&lt;/pre&gt;&lt;p&gt;上頭的例子, 在我這兒是可以產生正確的 excel 檔案.&lt;/p&gt;&lt;p&gt;在 pear 的 bug 列表中, bug 1572 並不是 open 狀態, 也許是因為這個原因, 所以這個 patch 存在了好幾年,
這之間也有 release 過新的版本, 但是一直都未納入這個 patch. 不過... 我也懷疑這個 class 是不是還有人在維護,
畢竟經過快兩年了, 都沒有任何的異動. 不管如何, 我重新 open 了一個 &lt;a href=&quot;http://pear.php.net/bugs/bug.php?id=14203&quot; target=&quot;_blank&quot;&gt;bug 14203&lt;/a&gt;, 把這兩個 patch 都放進去, 希望維護者能在下一個版本把這個問題修正吧. 
在這之前, 要使用的人就自己動手做吧. &lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/301</link>
      <pubDate>Sat, 21 Jun 2008 15:10:47 +0800</pubDate>   
  </item>
    <item>
   <title>透過 php 更改 ldap 的密碼</title>
   <description>&lt;p&gt;
一般來說, 我們在使用 php 去檢查使用者的帳號密碼時, 都是直接用該組帳號密碼去執行 ldap_bind() 的動作, 如果成功的話, 表示密碼是對的, 如果失敗的話, 表示密碼是錯的. (唯一的例外是... 如果密碼是空字串, 也會成功, 所以用這個方法要先檢查密碼是不是空的) 如:
&lt;/p&gt;
&lt;pre class=&quot;php&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$password&lt;/span&gt; !== &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt; &amp;amp;&amp;amp; ldap_bind&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$id&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;uid=$user,dc=example,dc=com&amp;quot;&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$password&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;password correct!&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;&lt;br /&gt;    &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;wrong password!&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;
但是, 如果要修改密碼時, 又該如何呢? 我們可以用下面的方式:
&lt;/p&gt;
&lt;pre class=&quot;php&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ldap_mod_replace&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$id&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&amp;quot;uid=$username,dc=example,dc=com&amp;quot;&lt;/span&gt;, &lt;br /&gt;        &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;userpassword&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;{MD5}&amp;quot;&lt;/span&gt;.&lt;a href=&quot;http://www.php.net/base64_encode&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;base64_encode&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;http://www.php.net/pack&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;pack&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&amp;quot;H*&amp;quot;&lt;/span&gt;,&lt;a href=&quot;http://www.php.net/md5&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;md5&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$newpass&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;succeded&lt;span class=&quot;es0&quot;&gt;\n&lt;/span&gt;&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;kw1&quot;&gt;else&lt;/span&gt;&lt;br /&gt;    &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;failed&amp;quot;&lt;/span&gt;;&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;
就是先用該使用者 (或有權限改密碼的帳號) bind 之後, 去更改 userpassword 這個屬性. 使用 md5 的方式去設定密碼. 
&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/291</link>
      <pubDate>Thu, 06 Mar 2008 19:14:28 +0800</pubDate>   
  </item>
    <item>
   <title>Dialogic 在 Linux 上使用 ISDN 的設定</title>
   <description>&lt;p&gt;
在&lt;a href=&quot;http://blog.teatime.com.tw/1/post/249&quot; target=&quot;_blank&quot;&gt;上一篇文章&lt;/a&gt;提到了一些在 Dialogic 上頭使用 ISDN 要注意的事項. 不過原本用來測試的平台是用 Windows, 最近系統要上線使用前, 為了方便起見, 我們還是決定轉到 Linux 上頭使用.
&lt;/p&gt;
&lt;p&gt;
在 Linux 上頭, 並沒有如同 Windows 一樣, Dialogic 有個專用的設定程式會自己抓取上頭安裝的語音卡, 只能用個 mkcfg 的指令一個個來選擇支援的型號. 而在 ISDN 上頭, 這個 mkcfg 指令並沒有任何相關的設定,&amp;nbsp; 就只能自己去改 /usr/dialogic/cfg/dialogic.cfg 這個設定檔的內容了.
&lt;/p&gt;
&lt;p&gt;
以我們使用的 E1 ISDN 來說, 通常都是使用 CTR4 這個歐規的協定. 除了前一篇文章所提到的 CRC 設定外, 要自己在 dialogic.cfg 加上 ISDNProtocol 的設定 (網路上看到的還需要 ParameterFile 設定) 才可以. 如果有兩個 port, 要分別設定, 第二個 port 是使用 ISDNProtocol2 與 ParameterFile2 的設定.
&lt;/p&gt;
&lt;p&gt;
以我們所使用的 D/600JCT-2E1 來看, 目前的設定如下:&amp;nbsp;
&lt;/p&gt;
&lt;pre class=&quot;reg&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;Genload - All Boards&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;&lt;br /&gt;LogFile=genload.log&lt;br /&gt;BusType=SCBus&lt;br /&gt;SCBusClockMaster=AUTOMATIC&lt;br /&gt;SCBusClockMasterSource=AUTOMATIC&lt;br /&gt;PCMEncoding=ALAW&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;Genload - PCI ID 0&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt; /* Dual T1/E1 PCI HD */&lt;br /&gt;ISDNProtocol=CTR4&lt;br /&gt;ParameterFile=spandti.prm&lt;br /&gt;ISDNProtocol2=CTR4&lt;br /&gt;ParameterFile2=spandti.prm&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;
我試過網路上頭查到的另一種設定如下:
&lt;/p&gt;
&lt;pre class=&quot;reg&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;Genload - All Boards&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt;&lt;br /&gt;LogFile=genload.log&lt;br /&gt;BusType=SCBus&lt;br /&gt;SCBusClockMaster=AUTOMATIC&lt;br /&gt;SCBusClockMasterSource=AUTOMATIC&lt;br /&gt;PCMEncoding=ALAW&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;br0&quot;&gt;[&lt;/span&gt;Genload - PCI ID 0&lt;span class=&quot;br0&quot;&gt;]&lt;/span&gt; /* Dual T1/E1 PCI HD */&lt;br /&gt;ISDNProtocol=CTR4&lt;br /&gt;ParameterFile=ctr4.prm&lt;br /&gt;ISDNProtocol2=CTR4&lt;br /&gt;ParameterFile2=ctr4.prm&lt;/div&gt;&lt;/pre&gt;
&lt;p&gt;
這兩種方式, 在我們的機器上頭, 結果都一樣, 都可以正常使用.
&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/284</link>
      <pubDate>Sat, 02 Feb 2008 16:26:16 +0800</pubDate>   
  </item>
    <item>
   <title>phpmsnclass v1.8</title>
   <description>&lt;p&gt;更新 &lt;a href=&quot;http://code.google.com/p/phpmsnclass/&quot; target=&quot;_blank&quot;&gt;phpmsnclass&lt;/a&gt;  版本為 1.8. &lt;/p&gt;&lt;p&gt;異動記錄:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;修正 sendMessage() 中的 $re_login undefined 錯誤.&lt;/li&gt;&lt;li&gt;忽略所有 text/x- 與 application/x- 的訊息, 只處理已知的訊息.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;修正在收到 NS 送來的 XFR 訊息, 要求重新連線時, 會重送前一個訊息的問題.&lt;/li&gt;&lt;li&gt;修正 $hdr_TotalDataSize1 與 $hdr_TotalDataSize2 undefined 的錯誤.&lt;/li&gt;&lt;li&gt;新增個人訊息 (PSM) 的支援.&lt;/li&gt;&lt;li&gt;修改 doLoop() 的參數, 改用陣列來傳送參數, 方便以後新增參數時的處理.&lt;/li&gt;&lt;li&gt;有多個收件者時, 不再使用群組發送的方式, 改為每個收件者使用獨立的 switchboard 來處理.&lt;/li&gt;&lt;li&gt;sendMessage() 的 $aTo 參數, 如果只有一個收件者時, 允許使用字串而非陣列.&lt;/li&gt;&lt;li&gt;修正接收到 Yahoo 訊息的換行問題.&lt;/li&gt;&lt;li&gt;訊息大小 (含檔頭) 目前已經被限制為 1664 (WLM) 位元組與 518 (YIM) 位元組. 超過這個大小時, 可能會有錯誤, 而收件者也無法收到訊息. 如果有大於這個限制的訊息, 會分開傳送.&amp;nbsp; (不過 YIM 在接收時, 有時順序會與發送順序不一樣) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;檔案請到 &lt;a href=&quot;http://code.google.com/p/phpmsnclass/downloads/list&quot; target=&quot;_blank&quot;&gt;Google Code&lt;/a&gt;  抓取.&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/271</link>
      <pubDate>Sun, 11 Nov 2007 10:13:13 +0800</pubDate>   
  </item>
    <item>
   <title>FPDF UTF-8 簡繁中文支援</title>
   <description>&lt;p&gt;以前, 在 &lt;a href=&quot;http://www.fpdf.org/&quot; target=&quot;_blank&quot;&gt;FPDF&lt;/a&gt;  的中文支援中, 並不支援 UTF-8 編碼, 所以每次要產生 pdf 檔案時, 都要用 iconv 轉成 BIG5 或 GB 來使用. 如果同一段文字有簡體也有繁體時, 這個轉換就會有問題 (不過還好我們之前的案子, 還沒碰到這個問題, 系統把兩種編碼分開來用, 並沒有衝突的情形發生). 後來, 有人改了一個 &lt;a href=&quot;http://acko.net/blog/ufpdf&quot; target=&quot;_blank&quot;&gt;unicode 版本的 FPDF&lt;/a&gt;, 雖然有支援 UTF-8 了, 但是... 作法是把字型檔也整個編入 pdf 檔案中, 結果.... 是可以使用沒錯, 但是... 原本幾 KB 的 pdf 檔案, 變成幾 MB, 根本沒有實用性.今天, 閒閒在網路上逛, 不小心看到&lt;a href=&quot;http://www.fpdf.org/phorum/read.php?f=1&amp;amp;i=5142&amp;amp;t=5142&quot; target=&quot;_blank&quot;&gt;有人弄出了一個 unicode 的中文支援&lt;/a&gt;, 趕快把 &lt;a href=&quot;https://www.eejj.net/fpdf/chinese-unicode.zip&quot; target=&quot;_blank&quot;&gt;chinese-unicode.zip&lt;/a&gt; (&lt;a href=&quot;http://www.teatime.com.tw/~tommy/files/chinese-unicode.zip&quot; target=&quot;_blank&quot;&gt;放了一份在我這兒&lt;/a&gt;) 抓下來使用, 果然可以正確的產生簡繁共存的 UTF-8 編碼的 PDF 檔案, 檔案也是小小的一個. 雖然其他的語言的 UTF-8 的字不能用, 不過... 至少中文是沒有問題的.&amp;nbsp;&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/268</link>
      <pubDate>Sat, 20 Oct 2007 12:49:08 +0800</pubDate>   
  </item>
  </rdf:RDF>

