Xử lý chuỗi với CodeIgniter

Ngày 3 tháng 4 năm 2013 Trương Chương Dương

CI hỗ trợ rất nhiều thao tác trên chuỗi, theo kinh nghiệm mình thấy thì hầu như các yêu cầu thông dụng liên quan về chuỗi và xử lý văn bản đều được CI hỗ trợ đầy đủ.

Để sử dụng những function này, bạn cần phải load helper tương ứng.

Các function có trong Text helper:

Để sử dụng những function này, trong controller bạn phải thêm lệnh sau:

$this->load->helper('text');

Nếu cần load trong model, view, library hay các helper khác, bạn load như sau:

$ci =& get_instance();

$ci->load->helper('text');


1. Xoá bỏ ký tự có dấu, ký tự đặc biệt:

Ví dụ:

$a = “Đây là ví dụ của việc xoá dấu”;

$b = convert_accented_characters($a);

Lúc này $b = “Day la vi du cua viec xoa dau”;

Function này hoạt động được với hầu hết các loại ngôn ngữ hiện nay trên thế giới, trừ các loại chữ tượng hình (tiếng Nhật, Hàn, ...) và chữ Phạn.

 

2. Giới hạn độ dài đoạn văn bản theo số lượng từ:

Thông thường khi hiển thị đoạn tóm tắt của một văn bản dài, bạn sẽ đếm số ký tự tối đa và cắt chuỗi, tuy nhiên vấn đề là từ cuối cùng có thể bị cắt mất một phần dẫn tới lỗi khi hiển thị hoặc người dùng có thể hiểu nhầm từ đó. Trong trường hợp này bạn nên dùng hàm word_limiter để cắt đoạn văn theo số lượng từ được giới hạn.

Ví dụ:

$a = “Đây là ví dụ của cắt theo số từ”;

$b = word_limiter($a, 3);

$c = word_limiter($a, 3, “... Đọc tiếp ...”);

Lúc này:

$b = “Đây là ví...”;

$c = “Đây là ví... Đọc tiếp ...”;

 

3. Giới hạn độ dài văn bản theo số lượng ký tự:

Tương tự như word_limiter nhưng function character_limiter lại cắt theo đúng số lượng ký tự bạn cần.

Ví dụ:

$a = “Đây là ví dụ của cắt theo số từ”;

$b = character_limiter($a, 5);

$c = character_limiter($a, 5, “... Đọc tiếp ...”);

Lúc này:

$b = “Đây l...”;

$c = “Đây l... Đọc tiếp ...”;

 

4. Kiểm duyệt và xoá các từ/cụm từ xấu:

Nếu bạn viết một trang có cho phép người dùng gửi đăng bài, và bạn muốn ngăn chặn người dùng gửi những từ tục tĩu gây ảnh hưởng xấu tới người khác. CI hỗ trợ function word_censor để kiểm duyệt và ngăn chặn hành động này.

Ví dụ:

$bad_word = array('darn', 'shucks', 'golly', 'phooey');

$string = word_censor($string, $bad_word, '****');

Lúc này tất cả các từ được định nghĩa trong $bad_word có xuất hiện trong $string sẽ bị đổi thành '****'

 

5. Tự động kiểm tra và chèn mã màu định dạng cho đoạn văn bản có code PHP, ASP, HTML, Javascript:

Có nhiều cách để hiển thị một đoạn văn bản có mã code với đầy đủ màu sắc và định dạng. CI hỗ trợ một cách rất đơn giản mà bạn không phải làm nhiều, đó là function highlight_code.

Ví dụ:

$a = “gán đoạn mã code vào đây”;

$b = highlight_code($a);

echo $b;

Lúc này bạn sẽ thấy mã code được hiển thị khá đẹp mắt trên trình duyệt. Màu sắc của các từ khoá, biến, ... được quy định trong file php.ini

 

6. Tạo chuỗi tóm tắt bằng cách cách bỏ đoạn giữa

Như trong diễn đàn này mọi người vẫn thấy, khi bạn gửi một đường link quá dài sẽ bị cắt ngắn bớt nhưng không phải cắt đoạn sau mà cắt bớt đoạn giữa và thêm dấu “...” vào. Trong CI để làm điều đó ta dùng function ellipsize.

Ví dụ:

$a = 'đây là đoạn văn bản khá dài để làm ví dụ';

$b = ellipsize($a, 33, 0.5, '…');

Kết quả sẽ là: đây là đoạ…ể làm ví dụ

Trong đó các tham số lần lượt có ý nghĩa như sau:

$a: chuỗi cần cắt

33: Độ dài tối đa của chuỗi, nếu $a ngắn hơn độ dài này thì CI sẽ không làm gì cả

0.5: Con số này chạy từ 0 -> 1, là phần trăm của vị trí sẽ bị cắt và nối thêm dấu “...”. Nếu bạn truyền vào 1 thì nó sẽ cắt cuối chuỗi (tương tự character_limiter). Nếu bạn truyền vào là 0 thì nó sẽ cắt và nối ở đầu chuỗi. Nếu bạn thích cắt và nối ở vị trí sao cho sau dấu ... dài bằng 2/3 đoạn trước dấu ... thì bạn sẽ truyền vào con số 2/3 ~ 0.6666666667

'…': Nó sẽ nối cái chuỗi bạn truyền vào này thay cho đoạn bị cắt. Cụ thể trong trường hợp này … là dấu ... trong mã HTML đó bạn :), nếu bạn không truyền tham số cuối này thì mặc định CI sẽ là …

 

 

Các function có trong String helper:

Để sử dụng những function này, trong controller bạn phải thêm lệnh sau:

$this->load->helper('string');

Nếu cần load trong model, view, library hay các helper khác, bạn load như sau:

$ci =& get_instance();

$ci->load->helper('string');

 

1. Tạo chuỗi ngẫu nhiên:

$a = random_string('alnum', 16); // Tạo chuỗi ngẫu nhiên 16 ký tự từ các ký tự chữ cái (hoa thường) và chữ số.

Tham số đầu ('alnum') có thể thay bằng:

alpha: Ký tự chữ cái hoa thường.

alnum: Chữ cái hoa thường và chữ số.

numeric: Chỉ bao gồm chữ số.

nozero: Bao gồm chữ số từ 1-9 (không có số 0).

unique: MD5 của uniqid(). Lúc này tham số độ dài sẽ bỏ qua và chuỗi tạo thành luôn có 32 ký tự.

sha1: Chuỗi mã hoá ngẫu nhiên theo security key mà bạn đã cấu hình trong file config.php .

 

2. Lấy giá trị tuần tự và lặp lại theo chu kỳ vòng tròn của dãy các giá trị

Mô tả thì khá khó hiểu ;) nhưng mà cách dùng thì khá là đơn giản và hữu ích. Mình có một ví dụ thế này:

Để tạo một table trên view mà mỗi dòng của nó có những màu nền khác nhau. Để làm điều đó mỗi tr mình gán một class khác nhau với css khác nhau. Cụ thể:

Tức là <tr> đầu tiên của <table> sẽ có class = class1.

<tr> tiếp theo của <table> sẽ có class = class2.

<tr> tiếp theo nữa của <table> sẽ có class = class1. (lặp lại)

<tr> sau đó của <table> sẽ có class = class2.

 

Trong view mình sẽ có code thế này:

<?php foreach ($data as $item) { ?>

<tr class=”<?php echo alternator('class1','class2') ?>”>

<?php } ?>

CI sẽ tự động xác định dòng đó là dòng thứ bao nhiêu và tự lấy đúng class mà mình muốn ;)

Bạn có thể gọi alternator với số lượng tham số bất kỳ, ví dụ như để xuất chu kỳ tháng cho một năm bạn chỉ cần truyền vào kiểu như: alternator(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12).

 

3. Xoá ký thừa tự lặp lại nhiều lần

$a = “,,,caan,, phai,, xoaa,,,, bo dau ,”;

$b = reduce_multiples($a);// Lúc này $b = “,caan, phai, xoaa, bo dau,”

$b = reduce_multiples($a, “,”, TRUE);// Lúc này $b = “caan, phai, xoaa, bo dau” mất luôn dấu , ở đầu và cuối

$b = reduce_multiples($a, “a”);// Lúc này $b = “,,,can,, phai,, xoa,,,, bo dau,” lúc này nó xoá bỏ chữ a thừa thay cho dấu , mặc định.

 

4. Làm đẹp đường dẫn bằng cách xoá các dấu / mà không làm mất đoạn http://

Thông thường, đường dẫn có thể có xuất hiện nhiều dấu / không đẹp mắt và bạn cần xoá nó đi. Tuy nhiên vấn đề hay gặp phải là sau khi xoá thì nếu đường dẫn bắt đầu bằng http:// thì hai dấu // đó cũng mất đi một cái làm điên đầu các “học giả” ;) Trong CI chỉ cần làm như sau:

$a = “http://domain.com//abc//defg//hjk”;

$b = reduce_double_slashes($a);

Lúc này $b = “http://domain.com/abc/defg/hjk

Đang tải dữ liệu...
web site traffic statistics