Thứ Năm, 24 tháng 9, 2009

Lọc bỏ dấu tiếng việt trong PHP

 

Friday, 9. January 2009, 13:21:28

tiếng việt, PHP

Trong quá trình lập trình, có lúc chúng ta muốn lọc bỏ dấu tiếng Việt. (để search chẳng hạn). Tôi xin nêu ra một cách để cách để các bạn tham khảo:
Giả sử ta có một chuỗi :

<?
$cs="Thật là lắm chuyện";

$marTViet=array("à","á","ạ","ả","ã","â","ầ","ấ","ậ","ẩ","ẫ","ă",
"ằ","ắ","ặ","ẳ","ẵ","è","é","ẹ","ẻ","ẽ","ê","ề"
,"ế","ệ","ể","ễ",
"ì","í","ị","ỉ","ĩ",
"ò","ó","ọ","ỏ","õ","ô","ồ","ố","ộ","ổ","ỗ","ơ"
,"ờ","ớ","ợ","ở","ỡ",
"ù","ú","ụ","ủ","ũ","ư","ừ","ứ","ự","ử","ữ",
"ỳ","ý","ỵ","ỷ","ỹ",
"đ",
"À","Á","Ạ","Ả","Ã","Â","Ầ","Ấ","Ậ","Ẩ","Ẫ","Ă"
,"Ằ","Ắ","Ặ","Ẳ","Ẵ",
"È","É","Ẹ","Ẻ","Ẽ","Ê","Ề","Ế","Ệ","Ể","Ễ",
"Ì","Í","Ị","Ỉ","Ĩ",
"Ò","Ó","Ọ","Ỏ","Õ","Ô","Ồ","Ố","Ộ","Ổ","Ỗ","Ơ"
,"Ờ","Ớ","Ợ","Ở","Ỡ",
"Ù","Ú","Ụ","Ủ","Ũ","Ư","Ừ","Ứ","Ự","Ử","Ữ",
"Ỳ","Ý","Ỵ","Ỷ","Ỹ",
"Đ");

$marKoDau=array("a","a","a","a","a","a","a","a","a","a","a"
,"a","a","a","a","a","a",
"e","e","e","e","e","e","e","e","e","e","e",
"i","i","i","i","i",
"o","o","o","o","o","o","o","o","o","o","o","o"
,"o","o","o","o","o",
"u","u","u","u","u","u","u","u","u","u","u",
"y","y","y","y","y",
"d",
"A","A","A","A","A","A","A","A","A","A","A","A"
,"A","A","A","A","A",
"E","E","E","E","E","E","E","E","E","E","E",
"I","I","I","I","I",
"O","O","O","O","O","O","O","O","O","O","O","O"
,"O","O","O","O","O",
"U","U","U","U","U","U","U","U","U","U","U",
"Y","Y","Y","Y","Y",
"D");
echo str_replace($marTViet,$marKoDau,$cs);
?>

Một số hàm xử lý mảng trong PHP (20 hàm)


Tiếp theo chuỗi thì đến mảng nào:
1. array_change_key_case($array, [int $case])
- Đổi toàn bộ key của mảng thành chữ hoa hoặc chữ thường tùy thuộc vào giá trị của tham số $case truyền vào. Default $case sẽ nhận giá trị 0
- $case có thể có các giá trị: CASE_LOWER(hoặc thay thế bằng 0) và CASE_UPPER(hoặc thay thế bằng 1)
- Example:

Code:

$array1 = array("First_name"=>"a Thang", "Last_name"=>"b Han Van", 3=> "c This is number");
+ $ary1 = array_change_key_case($array1, 1 );
//Output:
Array
(
[FIRST_NAME] => Thang
[LAST_NAME] => Han Van
[3] => This is number
)
+ $ary2 = array_change_key_case($array1) //convert to lowercase //Output:
Array (
[first_name] => a Thang
[last_name] => b Han Van
[3] => c This is number
)


2. array_push( array &$array, mixed $var [, mixed $...] )

- Thêm một hoặc nhiều phần tử vào cuối một mảng có sẵn


- Nó hoạt động giống như ta thêm một phần tử bằng cách 2: $xxx[] = “xxxx”;


- Sẽ có lỗi xảy ra nếu tham số đầu tiên truyền vào không phải là một mảng. Khác với các dùng thứ 2 để thêm phần tử vào mảng, ở cách 2 nếu mảng chưa tồn tại thì sẽ khởi tạo mảng


- Key của phần tử mới được thêm vào sẽ bằng key lớn nhất trong mảng(nếu là mảng số, hoặc mảng hỗn hợp) cộng thêm 1 hoặc bắt đầu từ 0 với mảng associative


- Nếu chỉ thêm một phần tử vào mảng thì nên sử dụng cách thứ 2.


- Example :



Code:



array_push($array1, "Them bang array_push");
//print_r($array1)
Array
// * (
// * [Frist_name] => Thang
// * [Last_name] => Han Van
// * [3] => This is number
// * [4] => Them bang array_push
// * )


3. array_pop̣̣̣̣̣̣̣( array &$array )

- Pop and returns the last value of the array . Nếu mảng là rỗng hoặc ko phải mảng, giá trị trả về sẽ là null


- Example:



Code:



$ary3 = array_pop($array1);
var_dump($array1); //array(2) { ["Frist_name"]=> string(7) "a Thang" ["Last_name"]=> string(9) "b Han Van" }
var_dump($ary3); //string(16) "c This is number"


4. array_shift(array &$array)

- Shift an element off the beginning of array


- Example:



Code:



$ary_shift = array_shift($array1);    
var_dump($ary_shift); //string(7) "a Thang"


5. array_unshift ( array &$array, mixed $var [, mixed $...] )

- Thêm một hoặc nhiều phần tử vào đầu mảng


- Example:



Code:



    $aryToUnshift = array("array unshift");
$ary_unshift = array_unshift($array1, $aryToUnshift);
var_dump($array1);
//output:
array(4) {
[0]=>
array(1) {
[0]=>
string(13) "array unshift"
}
["Frist_name"]=>
string(7) "a Thang"
["Last_name"]=>
string(9) "b Han Van"
[1]=>
string(16) "c This is number"
}


6. sort ( array &$array [, int $sort_flags] )

- Sắp xếp mảng, chiều sắp xếp tùy thuộc vào tham số $sort_flags. Default sẽ sắp xếp theo chiều ASC.


- Sử dụng hàm sort sẽ làm thay đổi key của all các phần tử trong mảng


- Sort_flags nhận các giá trị sau: SORT_REGULAR, SORT_NUMERIC, SORT_STRING, SORT_LOCALE_STRING (xem thêm phpmanual)


- Example:



Code:



$aryToSort = array(4,2,44,7,6);
sort($aryToSort);
print_r($aryToSort);
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 7
[4] => 44
)


7. asort( array &$array [, int $sort_flags] )

- Sắp xếp một mảng kết hợp giữ nguyên key của các phần tử


- Sort_flags giống như hàm sort


- Example:



Code:



$aryToSort = array(
"key 4" => 4,"key 2" =>2,
"key 44" =>44,"key 7"=>7,
"key 6" =>6);
asort($aryToSort);
print_r($aryToSort);
Array
(
[key 2] => 2
[key 4] => 4
[key 6] => 6
[key 7] => 7
[key 44] => 44
)


8. rsort(array &$array [, int $sort_flags])

- Sort một mảng theo thứ tự đảo ngược


- Function này sẽ tự động gán key mới cho các phần tử trong mảng sau khi sort



Code:



$aryToSort = array(
"key 4" => 4,"key 2" =>2,
"key 44" =>44,"key 7"=>7,
"key 6" =>6);
rsort($aryToSort);
print_r($aryToSort);
Array
(
[0] => 44
[1] => 7
[2] => 6
[3] => 4
[4] => 2
)


--> Mảng đã bị đảo ngược và thay đổi key

9. arsort(array &$array [, int $sort_flags])


- Sort một mảng theo thứ tự đảo ngược, giữ nguyên key của các phần tử


- Example



Code:



$aryToSort = array(
"key 4" => 4,"key 2" =>2,
"key 44" =>44,"key 7"=>7,
"key 6" =>6);
arsort($aryToSort);
print_r($aryToSort);
Array
(
[key 44] => 44
[key 7] => 7
[key 6] => 6
[key 4] => 4
[key 2] => 2
)


10. ksort (array &$array [, int $sort_flags])

- Sorts an array by key, maintaining key to data correlations. This is useful mainly for associative arrays.



Code:



$aryToSort = array(
"key 4" => 4,"key 2" =>2,
"key 44" =>44,"key 7" =>7,
"key 6" =>6);
ksort($aryToSort);
print_r($aryToSort);
Array
(
[key 2] => 2
[key 4] => 4
[key 44] => 44
[key 6] => 6
[key 7] => 7
)


11. uksort( array &$array, callback $cmp_function )

- Sắp xếp key của mảng theo hàm do user định nghĩa



Code:



$aryToSort = array(
"key 4" => 4,"key 2" =>2,
"key 44" =>44,"key 7" =>7,
"key 6" =>6);
function xxx($a, $b) {
return ($a < $b);
}
uksort($aryToSort, "xxx");
print_r($aryToSort);
Array
(
[key 7] => 7
[key 6] => 6
[key 44] => 44
[key 4] => 4
[key 2] => 2
)


12. uasort( array &$array, callback $cmp_function )

- Sắp xếp giá trị của mảng theo hàm do user định nghĩa


- Giữ nguyên keys của các phần tử trong mảng



Code:



$aryToSort = array(
"key 4" => 4,"key 2" =>2,
"key 44" =>44,"key 7" =>7,
"key 6" =>6);
function xxx($a, $b)
{
return ($a < $b);
}
uasort($aryToSort, "xxx");
print_r($aryToSort);
Array
(
[key 44] => 44
[key 7] => 7
[key 6] => 6
[key 4] => 4
[key 2] => 2
)


13. count( mixed $var [, int $mode] )

- Trả về số phần tử của mảng


- Nếu $var không phải là 1 mảng hoặc object thì giá trị trả về là 1


- ở chế độ COUNT_RECURSIVE hàm count sẽ đếm all các mảng con. Để dễ hiểu hơn xin xem ví dụ:



Code:



 $food = array('fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard', 'pea'));

// recursive count
echo count($food, COUNT_RECURSIVE); // output 8


- Lưu ý: hàm count có thể trả về giá trị 0 nếu một biến chưa được set hoặc một mảng được khởi tạo empty. Để xác định biến có được set hay không thì sử dụng hàm isset().

14. is_array( mixed $var )


- Trả về TRUE nếu $var là một array và ngược lại



Code:



$is_array = array(1,2,4,6,78,423,2);
echo is_array($is_array) ? 'Array' : 'not an Array';
//output: Array


15. array_slice ( array $array, int $offset [, int $length [, bool $preserve_keys]] )

- Trích xuất một phần tử trong mảng được chỉ định bởi offset và length


- If offset is non-negative, the sequence will start at that offset in the array. If offset is negative, the sequence will start that far from the end of the array. (Câu này ko biết dịch như nào cho thuận )


- Hàm này trả về array, array này sẽ được reset lại key. Từ PHP 5.2.0, để array không bị reset key thì cần set $preserve_keys = true


- Khi $length không được set thì hàm này sẽ slice các phần tử từ offset đến phần tử cuối cùng của mảng


- Lưu ý: hàm này ko làm thay đổi mảng truyền vào($array)



Code:



$input = array("a", "b", "c", "d", "e");
$xxx = array_slice($input, -3,2);
$xxxx = array_slice($input, -3,2, true);
var_dump($xxx);
array(2) {
[0]=>
string(1) "c"
[1]=>
string(1) "d"
}

var_dump($xxxx); //ko reset key
array(2) {
[2]=>
string(1) "c"
[3]=>
string(1) "d"
}


16. array_splice( array &$input, int $offset [, int $length [, array $replacement]] )

- Remove và thay thế(nếu $replacement dc set) một phần của mảng (bằng một cái gì đó mà set ở parameter $replacement)


- Nếu $length ko được chỉ định thì mặc định sẽ removes everything from offset to the end of array.



Code:



$aryToSplice = array("a", "b", "c", "d", "e");
array_splice($aryToSplice, 1, 2, "xxx");
var_dump($aryToSplice);
array(4) {
[0]=>
string(1) "a"
[1]=>
string(3) "xxx"
[2]=>
string(1) "d"
[3]=>
string(1) "e"
}


17. array_sum($array)

- return sum of values in an array as an integer or float


- Nếu giá trị không phải là số thì nó sẽ được convert sang số



Code:



$input = array("a", "b", "c", "d", "e");
$array_sum = array(1,2,4,6,78,423,2);
echo array_sum($array_sum) . "\n"; //output: 516
echo array_sum($input) //output: 0


18. in_array( mixed $needle, array $haystack [, bool $strict] )

- Kiếm tra sự tồn tại của một giá trị trong mảng. Return TRUE nếu tồn tại, FALSE nếu không tồn tại


- $needle có thể là 1 string, integer hoặc array


- Nếu $needle là string thì phép so sánh sẽ phân biệt cả chữ hoa và chữ thường


- Khi biến $strict được set là TRUE thì hàm sẽ kiếm tra cả type của $needle


- Từ version 4.2 trở về trước thì biến $needle không thể là 1 mảng



Code:



$ary1 = array(array(1,2,3), "b", "c", "d", "e");
$ary2 = array(1,2,3);
$res = in_array($ary2, $ary1);
echo $res; //output: 1


19. array_search ( mixed $needle, array $haystack [, bool $strict] )

- Tương tự như hàm in_array. Hàm array_search sẽ trả về key của phần tử được tìm thấy trong mảng.


- Nếu tìm thấy nhiều hơn một kết quả thì hàm sẽ trả về key của phần tử đầu tiên được tìm thấy.


- Lưu ý: hàm có thể trả về FALSE, cũng có thể trả về giá trị khác tương đương với FALSE như 0 hoặc “”



Code:



$ary1 = array("b", "c", "d", "e",array(1,2,3));
$ary2 = array(1,2,3);
$res = array_search($ary2, $ary1);
echo $res; //output: 4


20. array_unique( array $array )

- Loại bỏ giá trị trùng trong một mảng


- Key của các phần tử vẫn được giữ nguyên


- Function sẽ tự ép kiểu theo kiểu giá trị của phần tử trước.



Code:



$input = array("4","3", 4, "3", 3);
$result = array_unique($input);
var_dump($result);
array(2) {
[0]=>
string(1) "4"
[1]=>
string(1) "3"
}


__________________



I am waiting for your dream



http://diendanaptech.com

Thứ Năm, 17 tháng 9, 2009

Cài đặt Service Book (kích hoạt Browser, MMS,...) cho Blackberry trong 1 phút


Như đã biết có vài topic hướng dẫn cách cài browser cho Blackberry của Meoluoi và Anworm, tuy nhiên các cách từ trước đến nay đều phải remove file khiến cho Blackberry phải khởi động lại nhiều lần làm mất nhiều thời gian. Bạn có thể thực hiện cài browser rất đơn giản mà không cần phải làm nhiều bước phức tạp.
Hỏi - đáp
1, Browser là gì
Browser là phần mềm để lướt web thường có sẵn trong các bản ROM của Blackberry.
2, Tại sao tôi nên cài browser?
Bởi vì dùng Browser bạn mới có thể download file, cài phần mềm OTA như Jivetalk, operamini.... Ví dụ từ browser bạn truy cập đến trang beejive.com là có thể cài đặt trực tiếp lên Blackberry mà không cần phải download về máy tính rồi dùng BDM để cài.
3, Service Book là gì, tại sao phải restore file này.
Mặc định browser của Blackberry chỉ dùng được khi bạn dùng gói data của Blackberry, ở VN Viettel đang cung cấp các gói dịch vụ này. Các file service book này chứa cấu hình của nhà mạng, thường được người quản trị mạng gửi qua BIS/BES đến máy Blackberry của bạn.
Tuy nhiên 1 số thành viên đã sửa file này để có thể dùng được với máy Blackberry không dùng gói dữ liệu BIS/BES. Bạn cần phải restore file này mới kích hoạt được browser.
Hướng dẫn cài đặt
1,
1, Vào mục Options --> Advanced Options --> Service Book.
Giữ "Alt" và gõ tiếp S B E B.
Sẽ có cửa sổ hiện ra thông báo Legacy SB Restore enabled.
2, Bây giờ bạn chỉ việc download file servicebook về máy tính, giải nén. Sau đó dùng Blackberry Desktop Manager restore dữ liệu.

3, Sau khi restore file servicebook xong sẽ xuất hiện icon Browser ở ngoài cửa sổ chính.
Các lỗi thường gặp

1, Nếu bạn đã vào browser mà xuất hiện lỗi "Your device does not any Browser Configuration Service Book Entries. Please contact your service provider to enable the Browser on your device" thì hãy ra màn hình home của Blackberry, vào Options --> Advanced Options --> Browser .
Chọn Default browser configurationBrowser. Save rồi vào lại Browser.
2, Sau khi restore chỉ có Hotspot chứ không có Browser hoặc ko có gì.
Có thể bạn chưa cài file Browser vào máy. Bạn hãy mở Blackberry Desktop Manager, sau đó bật Application Loader. Ở phần danh sách các phần mềm, nếu Browser chưa tick thì bạn hãy tick vào ô này để cài đặt Browser. Lưu ý là phải cài đặt OS mới hiện danh sách các phần mềm hệ thống.
3, Nếu cài browser hoàn tất mà bạn không vào được mạng sẽ có 1 vài cách khắc phục.
- Khởi động lại máy bằng cách nhấn ALT+Cap+Del hoặc tháo pin rồi lắp lại pin.
- Kiểm tra phần Default Browser phải là Browser. Nếu để hotspot thì chỉ dùng được nếu máy có tín hiệu wifi.
- Thử truy cập opera mini hoặc gmail để chắc chắn sóng GPRS của nhà mạng vẫn hoạt động tốt. Hiện nay gói D50, D25 của Viettel không ổn định nên có 1 số thuê bao không thể truy cập được GPRS khi đăng kí gói này.
- Thử cài bản servicebook khác, tôi thấy ổn định nhất là service book all network. Tuy nhiên bản này chỉ dùng được browser mà không dùng được MMS...
Ngoài ra nếu ai muốn tìm hiểu sâu thêm về servicebook cũng có thể tham khảo của Anworm tại đây .
Cách cấu hình để Browser lướt web nhanh hơn Link
Servicebook để nhận MMS cho các mạng Link
Download file servicebook ở dưới hoặc sử dụng servicebook dành riêng từng mạng của thành viên Anworm.

Trích:

Service book Anworm TCP for All Network
Service book Anworm TCp & Wifi (select mode) Updatte 07-feb-2009: add email service Book to TCP-Wifi. work with all network.

Service book for Vietnam network - Viettel - Mobifone - Vinaphone

Viettel

Viettel BIS
Viettel anworm Ver 2.1

Mobifone

Mobi anworm Ver 2.1

Vinaphone

Thank to clive48 - mobile-files.

File Kèm Theo

File Type: rar
Browser_via_TCP_all_network_beta_V1.1.rar (522 Bytes, 9001 lần tải)

Khởi động và cài đặt Windows từ ổ USB

Để giảm giá sản phẩm, nhiều laptop, đặc biệt là netbook, không được trang bị ổ đĩa quang, gây khó khăn cho người sử dụng khi muốn nâng cấp hệ điều hành.

Thông thường, người dùng phải cài đặt hệ điều hành bằng cách khởi động từ đĩa CD/DVD. Trong trường hợp máy thiếu ổ quang, họ có thể tìm đến một cách giải quyết đơn giản là cài đặt từ USB nhờ tiện ích miễn phí WinToFlash.

Yêu cầu:

- USB có dung lượng tối thiểu 3 GB để chứa bộ cài Windows.

- Format USB với định dạng NTFS: Click chuột phải vào biểu tượng USB trong My Computer > Format > chọn NTFS tại mục File System. Lưu ý: sao lưu toàn bộ dữ liệu trước khi format.

- Máy tính thứ 2 có ổ đĩa quang (CD/DVD) để đọc đĩa.

- Đĩa cài đặt Windows (có thể tìm mua tại các cửa hàng tin học). Nếu chỉ có file iso, có thể sử dụng Virtual Clone Drive (download tại đây) để tạo đĩa ảo.

Các bước tiến hành:

- Tải chương trình WinToFlash.

- Đặt đĩa cài Windows vào ổ đĩa quang và cắm USB vào máy.

- Giải nén file download được và kích hoạt WinToFlash.exe.

Lưu ý: Một số máy sẽ xuất hiện hộp thoại lỗi: "WinToFlash DLP_NotFound". Bấm OK để bỏ qua.

- Trên giao diện chính, bấm vào Service > Switch to Wizard Mode. Điều này sẽ đưa người dùng đến wizard, giúp tự động hóa hầu như toàn bộ quá trình cài đặt về sau.

- Bấm Next ở màn hình tiếp theo để tiếp tục quá trình.

- Hộp thoại Windows file path : đường dẫn ổ quang chứa đĩa cài đặt Windows. Hộp thoại USB drive : chỉ đường dẫn đến ổ USB đang được cắm trên máy tính.

- Click Next để tiếp tục.

- Chọn "I Accept…" ở hộp thoại tiếp theo và nhấn Continue, chương trình sẽ bắt đầu format lại USB. Đảm bảo rằng tất cả các dữ liệu đã được sao lưu trước khi nhấn OK.

- Quá trình chuyển đổi bộ cài từ đĩa sang USB sẽ diễn ra cho tới khi người dùng thấy thông báo "Done".

Lúc này, có thể sử dụng USB trên để khởi động và cài đặt Windows trên một laptop/netbook khác mà không cần đến ổ quang để đọc đĩa.

Lưu ý: Một số máy tính có thể yêu cầu người dùng thay đổi thiết lập BIOS để có thể khởi động từ USB. Họ có thể đọc thêm hướng dẫn kèm theo máy nếu chưa biết cách thay đổi các thiết lập của BIOS.