一般情况下我们使用substr截取汉字可能会遇到乱码问题。因为汉字是双字节的,当被截取了一个字节时,这个汉字就无法显示,乱掉了。
其实解决很简单,看下面的截取函数:
//截取超长字符串
function curtStr($str,$len=30){
貧窮不能等,因為時間久了,你就會貧窮習慣了;
夢想不能等,因為努力晚了,人老就無能為力了;
學習不能等,因為懂得少了,就沒本事夢想成真了;
健康不能等,因為身體垮了,人生的一切就都沒了。
一般情况下我们使用substr截取汉字可能会遇到乱码问题。因为汉字是双字节的,当被截取了一个字节时,这个汉字就无法显示,乱掉了。
其实解决很简单,看下面的截取函数:
//截取超长字符串
function curtStr($str,$len=30){
Excel 預設是沒有法辦直接讀取 UTF8 格式的文件 , 所以每次開啟 UTF8 格式的 CSV 檔 就會顯示亂碼
今天在閒逛 , 剛好爬到這篇文 ,就轉貼給讀者參考參考 , 請多多指教 ^^ (測試是OK無誤的)
範例:
$fp = fopen("report.csv","w");
Cookie真是一个伟大的发明,它允许web开发者保留他们的用户的登录状态。然而,当你的站点或网络
有一个以上的域名时就会出现问题了。
在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名。因此,如果在浏览器中对一个域名设置了一个cookie,这个 cookie对于其它的域名将无效。如果你想让你的用户从你的站点中的其中一个进行登录,同时也可以在其它域名上进行登录,这可真是一个大难题。
我的解决方案将使用下面的一般框架:
今天在PHPCHINA的论坛上看到有人问如何在PHP程序中判断一个文本文件的编码格式,有些人说使用mb_detect_encoding函数来判断,但是经过楼主的测试无论文档采用什么编码格式,都只是显示UTF-8。我在PHP在线文档中查看到这个方法可以检测
这个方法里面并没有使用mb_detect_encoding方法,而是使用mb_convert_encoding方法将原来的字符串转换后进行判断得出结果。我测试过该方法可以用来判断字符串是否采用UTF8的编码!
PHP has mail() function to send an email to users. However this mail() will not work:
=> If sendmail (or compatible binary) is not installed
=> If Apache Web server / Lighttpd running in chrooted jail
=> And your smtp server needs an authentication before sending an email
=> Or you just need to send email using PHP PEAR
如果要用php來抓取網頁,一般人最常想到的就是「fopen」這個函式了。但現在有了更強大的函式,「curl」,至於這個函式怎麼用呢?就往下看吧!
如使用mysql一樣,首先,我們必須先建立一個「curl」的連線,也因此,必須使用到「$ch = curl_init()」這個函式。而為了怕建立連線忘了關閉。因此,必須先寫好關閉的函式,「curl_close($ch)」。
接下來,你可以設定他截取網頁的選項,一般來說常用的有「CURLOPT_RETURNTRANSFER」、「CURLOPT_URL」、「CURLOPT_HEADER」、「CURLOPT_FOLLOWLOCATION」、「CURLOPT_USERAGENT」這幾個選項。而這幾個選項分別代表「將結果回傳成字串」、「設定截取網址」、 「是否截取header的資訊」、「是否抓取轉址」及「瀏覽器的user agent」。最後,再執行「curl_exec($ch)」以取出結果就可以了。
而以抓取yahoo為例,若我們要偽裝成google bot去抓取,那麼我們可以寫成下列的樣子。
寫文件是一個程式設計師最最痛苦的事情之一,尤其是寫了一堆程式後有人要你把 Function ,Class 等等等等,寫成一份文件。
這事情不管你是寫 c/c++ , perl , ruby , php 都不例外。
phpDocumentor 是我們的救星! 只要在寫程式的時候,乖乖的寫一點註解,寫一點範例,多一點說明,注意一下格式,等到程式完工後,只要一個指令,就可以立刻把全部程式的說明文件產生出來,而且還有多種樣式可以選擇,甚至可以作成 PDF , CHM 喔…
好了,屁話不多說,先來說說怎麼裝上這好用的東西吧…
當數字不足時, 通常會想到用 sprintf("%02d",$xxx); 去做補零的動作, 但是, 其實, 可以使用 php 的str_pad() 函式來解決這個需求 ,請參考以下的內容,謝謝
會找到有些使用sprintf函式的方法 像下面這樣
1.
$var
= 1;
2.
echo
sprintf(
"%02d"
,
$var
);
最近因為協助做主機的移轉 ,而原本的程式使用了 Mcrypt 做加密的演算 ,因此 ,就正好 google 了相關的文章做學習 ,覺得這篇寫得還挺清礎 ,貼上來與大家分享
------
PHP Cryptography: An Introduction Using Mcrypt
作者:Robert Peake
翻译:ericfish
Dear All,
不知道大家有沒有製作電子報或寄發 HTML E-mail 到 Outlook 或 Gmail 的問題 ? 有些朋友問了我一些問題 ,費心說明後發覺 ,下面的這篇文章 ,寫得 非常的清礎 ,請有興趣研究 HTML E-mail 或電子報內容的朋友們 ,可以花時間看一下喔 ^_^ 謝謝大家對本部落格的支持。
Please note a version of this article is published at SitePoint which includes links to related articles on their site. Changes to this article are noted at the bottom of this article. This article has been online since 2004.
HTML email newsletters have come a long way in the past five years since this article was first written. They’re still a useful way to get a web page delivered to interested readers to encourage them to visit your website or have your readers perform an action. The email marketing process also has become routine.
當寫入陣列時 ,系統 Log 出現 PHP Fatal error: Cannot use string offset as an array in xxxx 訊息時 ,該如何解決 ?
其主要原因為 將要寫入的陣列不存在 (尚未被建立) ,因此 ,請加上
if(!is_array($datas))
{
$datas = array();
最近需要寫到身份證字號驗證,參考相關網站介紹的規則,所試著也以PHP來寫看看這個函式。
-- Frank 補充
-- 經驗證 ,檢查的身份證字號會判斷為 Fail ,故修正函式 .
-- 如以下紅字部份 ,謝謝
//**************
// 身份證檢查
//**************
function checkNick($id){
//建立字母分數陣列
$head = array('A'=>1,'I'=>39,'O'=>48,'B'=>10,'C'=>19,'D'=>28, 'E'=>37,'F'=>46,'G'=>55,
'H'=>64,'J'=>73,'K'=>82, 'L'=>2,'M'=>11,'N'=>20,'P'=>29,'Q'=>38,'R'=>47,
'S'=>56,'T'=>65,'U'=>74,'V'=>83,'W'=>21,'X'=>3, 'Y'=>12,'Z'=>30);
//建立加權基數陣列
$multiply = array(8,7,6,5,4,3,2,1);
//檢查身份字格式是否正確
if (ereg("^[a-zA-Z][1-2][0-9]+$",$id) && strlen($id) == 10){
//切開字串
$len = strlen($id);
for($i=0; $i<$len; $i++)
{
$stringArray[$i] = substr($id,$i,1);
}
//取得字母分數
$total = $head[array_shift($stringArray)];
// 原本為 headPoint by Frank
//取得比對碼
$point = array_pop($stringArray);
//取得數字分數
$len = count($stringArray); // 遺漏分號
for($j=0; $j<$len; $j++){
$total += $stringArray[$j]*$multiply[$j];
}
//檢查比對碼
if (($total%10 == 0 )?0:10-$total%10 != $point) {
return false;
} else {
return true;
}
} else {
return false;
}
}
//***************
// 身份證產生
//***************
function getRandID(){
//建立字母分數陣列
$headPoint = array('A'=>1,'I'=>39,'O'=>48,'B'=>10,'C'=>19,'D'=>28,
'E'=>37,'F'=>46,'G'=>55,'H'=>64,'J'=>73,'K'=>82,
'L'=>2,'M'=>11,'N'=>20,'P'=>29,'Q'=>38,'R'=>47,
'S'=>56,'T'=>65,'U'=>74,'V'=>83,'W'=>21,'X'=>3,
'Y'=>12,'Z'=>30);
//建立加權基數陣列
$multiply = array(8,7,6,5,4,3,2,1);
//取得隨機數字
$number = mt_rand(1,2);
for($i=0 ;$i<7 ;$i++){
$number .= mt_rand(0,9);
}
//切開字串
$len = strlen($number);
for($i=0;$i<$len;$i++){
$stringArray[$i] = substr($number,$i,1);
}
//取得隨機字母分數
$index = chr(mt_rand(65,90));
$total = $headPoint[$index];
//取得數字分數
$len = count($stringArray);
for($j=0; $j<$len; $j++){
$total += $stringArray[$j]*$multiply[$j];
}
//取得檢查比對碼
if ($total%10 == 0 ) {
return $index . $number . 0;
} else {
return $index.$number.(10 - $total % 10);
}
}
原文轉貼自 : http://liaosankai.pixnet.net/blog/post/14514213
PHP的Session大家都很熟悉 ,但 Session 的陣列呢 ? 通常被用來儲存購物車的商品時 ,Session陣列就會派上用場了
轉貼這篇文章 ,與大家分享.
<?php
$_SESSION['s_user_name'] = array();
While writing some PHP Training materials for Pale Purple, I thought I'd add an updated guide on PHP and database access. I've already done one on PEAR::DB, but PEAR::MDB2 is it's successor and has a slightly different API.... and as PEAR::DB is now deprecated, it's probably about time I rewrote it anyway.
MDB2 is yet another database API for PHP. It's written in PHP, so can be used in a cross platform manner. Because it's written in PHP, it's not going to be as 'fast' as the PDO library, however it's portability may make up for that.
Compared to the native bundled legacy PHP libraries (mysqli_*, pgsql_*, sqlite_*, mysql_), changing which database you are using can be as simple as changing the connection parameters to your database. The PDO libraries offer the same advantage, however they require PHP5.
It's recommended you install it using the Pear installer, like the following :
pear install MDB2 pear install MDB2_Driver_$db
Where $db would be one of e.g. mysql, pgsql, sqlite, ori8, mssql etc.
當phpMyAdmin提示 找不到 PHP 內的 mbstring 編碼模組 時 ,該如何解決 ?
當使用的 Linux 發行版為 Fedora core 或其他 Red Hat base 則 ,使用 yum 指令及可輕鬆解決 !!
請參考以下範例:
[root@dns php.d]# yum -y install php-mbstring
There are at least 2 ways you can set your PHP include_path.
★1. Allowed memory size of 8388608 bytes exhausted
pecl install imagick
と打ったら
[root@localhost ~]# pecl install imagick downloading imagick-2.1.1.tgz ... Starting to download imagick-2.1.1.tgz (74,980 bytes) .................done: 74,980 bytes Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 536342 bytes) in /usr/share/pear/PEAR/Task/Replace.php on line 177
とかえってきました。
こういうエラーってエラー内容をそのまま検索すると意外と出てくるものですが、案の定、ありました。