<?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>修正這兩天 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>在 Win32 下的 PHP 使用 ftp_ssl_connect()</title>
   <description>&lt;p&gt;在 php 官方的說明文件中, 提到要使用 &lt;a href=&quot;http://www.php.net/ftp_ssl_connect&quot; target=&quot;_blank&quot;&gt;ftp_ssl_connect()&lt;/a&gt;  必須要有 openssl 的支援才可以. 而且在 Windows 下頭, 必須要自行重新編譯一個內建 openssl 支援的版本才可以. &lt;/p&gt;&lt;p&gt;文件上頭, 有人提到了&lt;a href=&quot;http://www.deciacco.com/blog/php/php-openssl-and-ftp_ssl_connect-on-win32&quot; target=&quot;_blank&quot;&gt;這個網頁&lt;/a&gt;, 上頭有說明如何自行在 Windows 下頭編譯出支援 ftp_ssl_connect() 的 php 版本. 不過上頭的說明, 也許是編排有誤的關係, 發現有一段少了幾句話, 會無法正常的編譯出 php 的執行檔. 所以我重新整理了一下.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;安裝 Visual C++.&lt;br /&gt;使用 Visual Studio Express 或 Visual Studio 2005 都可以.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;安裝所需要的函式庫.&lt;br /&gt;到&lt;a href=&quot;http://files.edin.dk/php/win32/zip.zip&quot; target=&quot;_blank&quot;&gt;這兒下載 zip.zip&lt;/a&gt;, 這是編譯 php 所需要的 library.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;如果你編譯 php 時, 有出現找不到 xmlXPathCompiledEvalToBoolean 的錯誤時, 表示你下載的 zip.zip 裡頭的 libxml2 並未更新到新的版本. 請到&lt;a href=&quot;http://ctindustries.net/libxml/&quot; target=&quot;_blank&quot;&gt;這兒&lt;/a&gt;抓取新的 &lt;a href=&quot;http://ctindustries.net/libxml/libxml2-2.6.31.php.zip&quot; target=&quot;_blank&quot;&gt;libxml2&lt;/a&gt;  回來.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;到 &lt;a href=&quot;http://www.php.net/downloads.php&quot; target=&quot;_blank&quot;&gt;php 官方網站&lt;/a&gt;下載 php 的原始碼.&lt;br /&gt;我是使用 php 5.2.6 的版本.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;把 php 的原始碼解開來, 放在 c:\work\php5 下頭.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;把 zip.zip 裡頭的 php_build 解開來, 放到 c:\work\php_build 下頭.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;如果有 xml 的錯誤, 把 libxml2 解開來, 裡頭的 include, lib, util 目錄, 搬到 c:\work\php_build 下頭, 覆蓋原來的檔案.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;打開一個 Command Prompt 視窗, 然後執行 vcvars32.bat&lt;br /&gt;這個批次檔應該是在你的 VC++ 下頭的 bin 目錄中.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;使用 patch 修正你的 ftp.c, 修正如下:&lt;br /&gt;&lt;pre class=&quot;diff&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;&lt;span class=&quot;re3&quot;&gt;--- php&lt;span class=&quot;nu0&quot;&gt;-5.2&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.6&lt;/span&gt;.orig/ext/ftp/ftp.c  Mon Dec &lt;span class=&quot;nu0&quot;&gt;31&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;20&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;06&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2007&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re4&quot;&gt;+++ php&lt;span class=&quot;nu0&quot;&gt;-5.2&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;.6&lt;/span&gt;/ext/ftp/ftp.c  Sun Sep  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;10&lt;/span&gt;:&lt;span class=&quot;nu0&quot;&gt;39&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2008&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re6&quot;&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-242&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+242&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; @@&lt;/span&gt;&lt;br /&gt; ftp_login&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftpbuf_t *ftp, const char *user, const char *pass TSRMLS_DC&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; #if HAVE_OPENSSL_EXT&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+  int  errcode;&lt;/span&gt;&lt;br /&gt;   SSL_CTX  *ctx = NULL;&lt;br /&gt; #endif&lt;br /&gt;   if &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp == NULL&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;re6&quot;&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-290&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;11&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+291&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;23&lt;/span&gt; @@&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     SSL_set_fd&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;ssl_handle, ftp-&amp;gt;fd&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-    if &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;SSL_connect&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &amp;lt;= &lt;span class=&quot;nu0&quot;&gt;0&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&gt;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-      php_error_docref&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;NULL TSRMLS_CC, E_WARNING, &amp;quot;SSL/TLS handshake failed&amp;quot;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-      SSL_shutdown&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-      return &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+    do &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      errcode = SSL_connect&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      switch &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;SSL_get_error&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;ssl_handle, errcode&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&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_NONE:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          errcode = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          break;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_WRITE:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_READ:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_X509_LOOKUP:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          errcode = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          break;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        default:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          php_error_docref&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;NULL TSRMLS_CC, E_WARNING, &amp;quot;SSL/TLS handshake failed&amp;quot;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          SSL_shutdown&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          return &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; while &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;errcode == &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &amp;amp;&amp;amp; !SSL_is_init_finished&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     ftp-&amp;gt;ssl_active = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;re6&quot;&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1272&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1285&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;9&lt;/span&gt; @@&lt;/span&gt;&lt;br /&gt; my_recv&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len&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;   int    n, nr_bytes;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+#if HAVE_OPENSSL_EXT&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+  int    no_error;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+#endif&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;   n = php_pollfd_for_ms&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;s, PHP_POLLREADABLE, ftp-&amp;gt;timeout_sec * &lt;span class=&quot;nu0&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;   if &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;n &amp;lt; &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;re6&quot;&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1287&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1303&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;25&lt;/span&gt; @@&lt;/span&gt;&lt;br /&gt;   if &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;use_ssl &amp;amp;&amp;amp; ftp-&amp;gt;fd == s &amp;amp;&amp;amp; ftp-&amp;gt;ssl_active&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt;     nr_bytes = SSL_read&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;ssl_handle, buf, len&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;   &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; else if &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;use_ssl &amp;amp;&amp;amp; ftp-&amp;gt;fd != s &amp;amp;&amp;amp; ftp-&amp;gt;use_ssl_for_data &amp;amp;&amp;amp; ftp-&amp;gt;data-&amp;gt;ssl_active&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;re7&quot;&gt;-    nr_bytes = SSL_read&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;data-&amp;gt;ssl_handle, buf, len&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+    no_error = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;; // there is no error&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+    do &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      nr_bytes = SSL_read&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;data-&amp;gt;ssl_handle, buf, len&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      switch &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;SSL_get_error&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;ftp-&amp;gt;data-&amp;gt;ssl_handle, nr_bytes&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&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_NONE:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_ZERO_RETURN:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_WRITE:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_X509_LOOKUP:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_READ:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          break;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_CONNECT:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_ACCEPT:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_SSL:            &lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_SYSCALL:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        default:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          no_error = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;; //major error, get out&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          break;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; while &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;nr_bytes &amp;lt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &amp;amp;&amp;amp; no_error&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; else &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;br /&gt; #endif&lt;br /&gt;     nr_bytes = recv&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;s, buf, len, &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;re6&quot;&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1491&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;6&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1525&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt; @@&lt;/span&gt;&lt;br /&gt;   socklen_t      size;&lt;br /&gt;&amp;nbsp;&lt;br /&gt; #if HAVE_OPENSSL_EXT&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+  int    errcode;&lt;/span&gt;&lt;br /&gt;   SSL_CTX    *ctx;&lt;br /&gt; #endif&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span class=&quot;re6&quot;&gt;@@ &lt;span class=&quot;nu0&quot;&gt;-1534&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;11&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;+1569&lt;/span&gt;,&lt;span class=&quot;nu0&quot;&gt;23&lt;/span&gt; @@&lt;/span&gt;&lt;br /&gt;       SSL_copy_session_id&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;data-&amp;gt;ssl_handle, ftp-&amp;gt;ssl_handle&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;re7&quot;&gt;-    if &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;SSL_connect&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;data-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &amp;lt;= &lt;span class=&quot;nu0&quot;&gt;0&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&gt;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-      php_error_docref&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;NULL TSRMLS_CC, E_WARNING, &amp;quot;data_accept: SSL/TLS handshake failed&amp;quot;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-      SSL_shutdown&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;data-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-      return &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re7&quot;&gt;-    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+    do &lt;span class=&quot;br0&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      errcode = SSL_connect&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;data-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      switch &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;SSL_get_error&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;data-&amp;gt;ssl_handle, errcode&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&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_NONE:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          errcode = &lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          break;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_WRITE:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_READ:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        case SSL_ERROR_WANT_X509_LOOKUP:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          errcode = &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          break;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+        default:&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          php_error_docref&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;NULL TSRMLS_CC, E_WARNING, &amp;quot;data_accept: SSL/TLS handshake failed&amp;quot;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          SSL_shutdown&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;data-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+          return &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+      &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;re8&quot;&gt;+    &lt;span class=&quot;br0&quot;&gt;}&lt;/span&gt; while &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;errcode == &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &amp;amp;&amp;amp; !SSL_is_init_finished&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;data-&amp;gt;ssl_handle&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;     data-&amp;gt;ssl_active = &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;/div&gt;&lt;/pre&gt;檔案可以由&lt;a href=&quot;http://www.teatime.com.tw/~tommy/files/ftp_ssl.patch&quot; target=&quot;_blank&quot;&gt;這兒抓取&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;執行下列幾個指令.&lt;br /&gt;
  &lt;pre class=&quot;winbatch&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;set PATH=&lt;span class=&quot;sy0&quot;&gt;%&lt;/span&gt;PATH&lt;span class=&quot;sy0&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;co1&quot;&gt;;C:\work\php_build\bin;&lt;/span&gt;&lt;br /&gt;set BISON_SIMPLE=C&lt;span class=&quot;co2&quot;&gt;:\work\php_build\bin\bison.simple&lt;/span&gt;&lt;br /&gt;set &lt;span class=&quot;kw1&quot;&gt;INCLUDE&lt;/span&gt;=C&lt;span class=&quot;co2&quot;&gt;:\work\php_build\include;%INCLUDE%&lt;/span&gt;&lt;br /&gt;set LIB=C&lt;span class=&quot;co2&quot;&gt;:\work\php_build\lib;%LIB%&lt;/span&gt;&lt;br /&gt;set LIBPATH=C&lt;span class=&quot;co2&quot;&gt;:\work\php_build\lib;%LIBPATH%&lt;/span&gt;&lt;span class=&quot;co2&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;開始編譯 php. 執行下列的指令:&lt;pre class=&quot;winbatch&quot;&gt;&lt;div class=&quot;insertcode&quot;&gt;cd c&lt;span class=&quot;co2&quot;&gt;:\work\php5&lt;/span&gt;&lt;br /&gt;buildconf&lt;br /&gt;cscript &lt;span class=&quot;sy0&quot;&gt;/&lt;/span&gt;nologo configure.js &lt;span class=&quot;sy0&quot;&gt;--&lt;/span&gt;with&lt;span class=&quot;sy0&quot;&gt;-&lt;/span&gt;openssl&lt;br /&gt;nmake&lt;/div&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;如果沒有錯誤 (會有一堆 warnning, 可以忽略), 最後在 c:\work\php5\Release_TS 下頭會有最後產生的檔案. 把 php.exe, php5ts.dll, php-cgi.exe 複製到你原本安裝 php 的目錄下, 覆蓋舊的檔案.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;把 zip.zip 裡頭 dev\template\dlls 裡頭的 libeay32.dll, ssleay32.dll 複製到你原本安裝的 php 的目錄下. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;幾過上頭的動作, 你的 php 就應該可以使用 ftp_ssl_connect() 了. 如果你不知道怎麼編譯, 且不怕我編出來的執行檔有問題的話, 可以下載&lt;a href=&quot;http://www.teatime.com.tw/~tommy/files/php-5.2.6-ftp-ssl.7z&quot; target=&quot;_blank&quot;&gt;這個檔案&lt;/a&gt; (php 5.2.6) 回去, 解開來放到你安裝 php 的目錄下, 覆蓋舊的檔案就可以了. 不過.... 如果因為這個檔案所造成的任何問題, 請自行負責, 不要來找我. :-)&lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/309</link>
      <pubDate>Sun, 07 Sep 2008 10:17:40 +0800</pubDate>   
  </item>
    <item>
   <title>MySPAM v0.0.5</title>
   <description>&lt;p&gt;MySPAM v0.0.5 推出. 其實也沒改到什麼, 這些修正好像都至少有半年了. 與前一版本的差異如下:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;+ 新增對同一主機多網域帳號的支援. 登入時請使用 user@domain 的方式登入即可.&lt;/li&gt;&lt;li&gt;! 檢查信件第一行是否為 &#039;From xxx@xxx.xxx.xx&#039; 這個非 header 的內容 (某些 postfix 有這行?), 如有就略過.&lt;/li&gt;&lt;li&gt;! 如果沒有 SIZE 環境變數, 就自行計算信件大小.&lt;/li&gt;&lt;/ul&gt;程式可以由這兒抓取: &lt;a href=&quot;http://www.teatime.com.tw/~tommy/myspam/myspam-0.0.5.tgz &quot; target=&quot;_blank&quot;&gt;http://www.teatime.com.tw/~tommy/myspam/myspam-0.0.5.tgz&lt;/a&gt;   &lt;br /&gt;或由這兒抓取最後一個版本: &lt;a href=&quot;http://www.teatime.com.tw/%7Etommy/myspam/myspam.tgz&quot;&gt;http://www.teatime.com.tw/~tommy/myspam/myspam.tgz&lt;/a&gt;&lt;br /&gt;0.0.4a to 0.0.5 的 patch: &lt;a href=&quot;http://www.teatime.com.tw/~tommy/myspam/myspam_004a_to_005.patch&quot; target=&quot;_blank&quot;&gt;http://www.teatime.com.tw/~tommy/myspam/myspam_004a_to_005.patch&lt;/a&gt;   &amp;nbsp;</description>
   <link>http://blog.teatime.com.tw/1/post/307</link>
      <pubDate>Wed, 06 Aug 2008 13:48:40 +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 chmod() 慘案</title>
   <description>&lt;p&gt;話說前一陣子在 php 裡頭用到了 &lt;a href=&quot;http://www.php.net/chmod&quot; target=&quot;_blank&quot;&gt;chmod&lt;/a&gt;  這個函式, 依據以往在 linux 下頭使用 chmod 指令的經驗, 加上使用 php 時, 並沒有做型別檢查的功能, 很自然的就會認為這個函式如同其他 php 的函式一般, 可以用數字也可以用字串來表示要更改的屬性. 而且, 的確在一開始的使用上, 做一些 o+w 或 o-w 之類的動作時, 都十分的正常, 一點都沒有懷疑這會有問題.&lt;/p&gt;&lt;p&gt;不過... 前幾天碰到了一個 g+s 的動作, 發現.... 一跑到這兒, 整個屬性反而被改成 000 了, 也就是被清空了. 這是怎麼回事呢?&lt;/p&gt;&lt;p&gt;想了很久, 也測了一些寫法, 最後, 終於在官方的 chmod 說明中看到, 這個 mode 參數, 只能是整數, 對於前述的字串參數來說, 是不對的. (說到這兒, 既然不允許, 是不是應該全部都失敗會比較好一些, 不要讓人誤以為可以使用, 結果... 只有某些情形下會不能用)&lt;/p&gt;&lt;p&gt;回頭把程式改了一下, 先取出屬性再做一堆 OR 運算, 自己弄出類似的結果, 然後再去把屬性改成自行運算後的結果, 這樣子果然就正常了. 有用到 chmod 的人, 自己注意一下吧. &lt;/p&gt;</description>
   <link>http://blog.teatime.com.tw/1/post/300</link>
      <pubDate>Wed, 28 May 2008 09:56:26 +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>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>

