Để xóa khoảng trắng và các ký tự xuống dòng (bao gồm cả ký tự khoảng trắng dư thừa, tab, và dấu xuống dòng) trong một chuỗi PHP, bạn có thể sử dụng một số hàm có sẵn trong PHP như preg_replace(), str_replace(), hoặc trim() kết hợp với các hàm khác.

1. Sử dụng preg_replace()

Hàm preg_replace() cho phép bạn sử dụng biểu thức chính quy để tìm và thay thế các ký tự mong muốn. Để xóa tất cả các khoảng trắng, xuống dòng, và các ký tự tương tự, bạn có thể sử dụng mẫu sau:

$string = "Đây là \n một chuỗi \t với \r nhiều \n khoảng trắng.";
$clean_string = preg_replace('/\s+/', '', $string);

echo $clean_string;

Giải thích:

  • \s: Biểu thức chính quy cho các ký tự khoảng trắng, bao gồm dấu cách, tab (\t), xuống dòng (\n), xuống dòng xe mới (\r), và các ký tự khoảng trắng khác.
  • +: Biểu thức chính quy chỉ định “một hoặc nhiều” ký tự liền trước.
  • preg_replace('/\s+/', '', $string): Thay thế tất cả các chuỗi ký tự khoảng trắng bằng một chuỗi rỗng, tức là xóa chúng.

2. Sử dụng str_replace()

Nếu bạn chỉ muốn xóa các ký tự xuống dòng và không muốn xóa các khoảng trắng khác, bạn có thể dùng str_replace():

$string = "Đây là \n một chuỗi \n với nhiều \n xuống dòng.";
$clean_string = str_replace(array("\r", "\n", "\r\n", "\t"), '', $string);

echo $clean_string;

Giải thích:

  • str_replace(): Hàm này tìm và thay thế các chuỗi con trong chuỗi nguồn.
  • array("\r", "\n", "\r\n", "\t"): Mảng các ký tự xuống dòng và tab mà bạn muốn xóa.

3. Sử dụng trim(), ltrim(), và rtrim()

  • trim(): Xóa khoảng trắng từ đầu và cuối chuỗi.
  • ltrim(): Xóa khoảng trắng từ đầu chuỗi.
  • rtrim(): Xóa khoảng trắng từ cuối chuỗi.

Các hàm này không xóa khoảng trắng ở giữa chuỗi, chỉ xóa khoảng trắng ở đầu và cuối.

$string = "   Đây là một chuỗi có khoảng trắng ở đầu và cuối.   ";
$clean_string = trim($string);

echo $clean_string;

Giải thích:

  • trim(): Hàm này xóa khoảng trắng từ đầu và cuối chuỗi, bao gồm cả các ký tự xuống dòng và tab.

Kết hợp các phương pháp

Nếu bạn muốn xóa cả khoảng trắng dư thừa ở đầu và cuối chuỗi và xóa tất cả các ký tự xuống dòng ở giữa, bạn có thể kết hợp trim() với preg_replace():

$string = "   Đây là \n một chuỗi \n với nhiều khoảng trắng.   ";
$clean_string = trim(preg_replace('/\s+/', '  ', $string));

echo $clean_string;

Giải thích:

  • preg_replace('/\s+/', ' ', $string): Thay thế tất cả các khoảng trắng liên tục bằng một khoảng trắng đơn.
  • trim(): Xóa khoảng trắng ở đầu và cuối chuỗi sau khi thay thế.

Tùy vào nhu cầu cụ thể của bạn mà chọn phương pháp phù hợp nhất!

Xoá xuống dòng nhưng giữ lại 1 dòng xuống dòng

Nếu bạn muốn xóa các khoảng trắng dư thừa và giữ lại tối đa một dòng xuống dòng trong chuỗi, bạn có thể sử dụng hàm preg_replace() với biểu thức chính quy để thay thế các đoạn xuống dòng liên tiếp thành một xuống dòng đơn.

Dưới đây là cách làm:

$string = "Đây là một \n\n\n\n chuỗi với \n\n nhiều \n khoảng trắng \n và xuống dòng.";

// Xóa khoảng trắng đầu và cuối chuỗi
$string = trim($string);

// Thay thế các dòng xuống dòng liên tiếp (\n) thành một dòng (\n)
$clean_string = preg_replace('/(\r?\n){2,}/', "\n", $string);

echo $clean_string;

Giải thích:

  1. trim($string): Xóa khoảng trắng đầu và cuối chuỗi, bao gồm cả các ký tự xuống dòng, tab, và khoảng trắng dư thừa.
  2. preg_replace('/(\r?\n){2,}/', "\n", $string):
    • (\r?\n): Biểu thức chính quy này khớp với một ký tự xuống dòng. \r? cho phép khớp với \r nếu nó tồn tại (để xử lý trường hợp xuống dòng kiểu Windows \r\n), và \n là ký tự xuống dòng kiểu Unix.
    • {2,}: Định lượng này chỉ ra rằng phải có ít nhất 2 ký tự xuống dòng liên tiếp. Điều này có nghĩa là bất kỳ chuỗi nào chứa từ 2 dòng xuống dòng trở lên sẽ khớp.
    • "\n": Chuỗi thay thế, trong trường hợp này là một ký tự xuống dòng duy nhất.

Với đoạn mã này, chuỗi ban đầu có nhiều dòng xuống dòng liên tiếp sẽ được giảm xuống chỉ còn một dòng xuống dòng giữa các đoạn. Các khoảng trắng dư thừa khác và các ký tự xuống dòng không liên tiếp sẽ được giữ nguyên.