Hàm substr() trong PHP
Trần Thị Vân
- 1121
- 26/07/2025
Chức năng của Hàm substr() trong PHP
Hàm substr() trong PHP dùng để cắt một chuỗi con từ một chuỗi gốc để tạo ra một chuỗi mới mà không làm thay đổi chuỗi gốc, để cắt được phải dựa vào 2 tham số linh động là số bắt đầu và số ký tự.
Cú pháp của Hàm substr() trong PHP
$chuỗi_mới = substr($chuỗi_gốc , vị_trí_bắt_đầu, số_ký_tự_cần_lấy);
$chuỗi_gốc: Biến chuỗi gốc cần lấy chuỗi con.
$chuỗi_mới: Trả kết quả về biến chuỗi mới
vị_trí_bắt_đầu: Vị trí bắt đầu cần cắt, vị trí của các ký tự bắt đầu từ số 0.
vị_trí_bắt_đầu là số dương: Bắt đầu từ vị_trí_bắt_đầu theo hướng từ trái qua phải, lấy các ký tự bên phải.
vị_trí_bắt_đầu là số âm: Bắt đầu từ vị_trí_bắt_đầu theo hướng từ phải qua trái, lấy các ký tự bên phải.
số_ký_tự_cần_lấy: số ký tự cần lấy hoặc cần loại bỏ.
số_ký_tự_cần_lấy có giá trị dương: Lấy số ký tự bằng số_ký_tự_cần_lấy bắt đầu từ vị_trí_bắt_đầu tính từ trái qua phải.
số_ký_tự_cần_lấy có giá trị âm: Loại bỏ số ký tự tính từ bên phải qua bằng số_ký_tự_cần_lấy, sau đó bắt đầu lấy từ vị_trí_bắt_đầu tính từ trái qua phải nhưng loại bỏ những ký tự lúc đầu.
Ví dụ Hàm substr() trong PHP
<?php
$chuoigoc = "DH09DT0315653348";
// Bắt đầu từ vị trí đầu tiên bên trái và lên ra 6 ký tự
echo substr($chuoigoc ,0, 6); //DH09DT
echo "<br>";
// Bắt đầu từ vị trí đầu tiên bên trái nhưng loại bỏ đi 10 ký tự bên phải
echo substr($chuoigoc ,0, -10); //DH09DT
echo "<br>";
// Bắt đầu từ vị trí thứ 6 bên trái và lấy ra 10 ký tự
echo substr($chuoigoc ,6, 10); //Kết quả: 0315653348
echo "<br>";
// Bắt đầu từ vị trí thứ 10 bên phải qua và kiểm tra 10 ký tự ở bên phải, lấy ra 10 ký tự từ trái qua
echo substr($chuoigoc ,-10, 10); //Kết quả: 0315653348
echo "<br>";
// Bắt đầu từ vị trí thứ 10 bên phải qua và kiểm tra 10 ký tự ở bên phải, loại đi 2 ký tự cuối cùng
echo substr($chuoigoc ,-10, -2); //Kết quả: 03156533
echo "<br>";
// Bắt đầu từ vị trí thứ 10 bên phải qua và kiểm tra 10 ký tự ở bên phải, lấy 2 ký tự đầu tiên
echo substr($chuoigoc ,-10, 2); //Kết quả: 03
echo "<br>";
// Bắt đầu từ vị trí đầu tiên bên phải qua và kiểm tra 1 ký tự ở bên phải, lấy 1 ký tự
echo substr($chuoigoc ,-1, 1); //Kết quả: 8
echo "<br>";
// Bắt đầu từ vị trí thứ 2 bên phải qua và kiểm tra 2 ký tự ở bên phải, lấy 2 ký tự
echo substr($chuoigoc ,-2, 2); //Kết quả: 48
echo "<br>";
?>
Lưu ý khi sử dụng hàm substr() trong PHP
Xử lý chuỗi tiếng Việt với substr()
Khi làm việc với tiếng Việt hoặc các chuỗi có ký tự Unicode, cần thận trọng khi sử dụng substr(). Hàm này xử lý chuỗi theo byte, trong khi một ký tự tiếng Việt có thể chiếm nhiều byte. Vì vậy, việc cắt chuỗi ở vị trí không phù hợp có thể làm ký tự bị tách giữa chừng và tạo ra kết quả hiển thị lỗi.
Nếu cần cắt chuỗi tiếng Việt theo đúng ký tự, mb_substr() thường phù hợp hơn. Hàm này nhận biết ký tự đa byte, giúp nội dung sau khi cắt vẫn giữ được cấu trúc Unicode.
<?php
$text = "Xin chào Web Mới";
echo mb_substr($text, 0, 8);
?>
Trong các website có nội dung tiếng Việt, đặc biệt là phần mô tả, tiêu đề hoặc đoạn giới thiệu được tạo tự động, nên xác định rõ chuỗi đang sử dụng bảng mã nào trước khi chọn hàm cắt chuỗi.
Kiểm tra vị trí và độ dài chuỗi trước khi cắt
Tham số start và length quyết định phần dữ liệu được lấy ra. Nếu xác định sai vị trí bắt đầu hoặc độ dài, kết quả có thể khác với mong muốn, nhất là khi chuỗi được lấy động từ cơ sở dữ liệu hoặc dữ liệu người dùng nhập vào.
Trước khi cắt, nên kiểm tra độ dài chuỗi và xác định rõ mục đích của từng tham số. Khi chỉ cần lấy phần còn lại từ một vị trí nhất định, có thể bỏ qua length thay vì tự tính độ dài không cần thiết.
<?php
$text = "PHP giúp xử lý chuỗi linh hoạt";
if (strlen($text) > 10) {
echo substr($text, 0, 10);
}
?>
Với dữ liệu thực tế, việc kiểm tra trước khi xử lý giúp hạn chế kết quả ngoài dự kiến và làm cho mã nguồn dễ kiểm soát hơn. Tuy nhiên, nếu chuỗi chứa tiếng Việt hoặc ký tự Unicode, nên cân nhắc mb_strlen() kết hợp với mb_substr() thay vì các hàm xử lý theo byte.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Hàm substr() trong PHP.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *