Thay thế Spaces bằng Underscores


136

Tôi có một PHP Script mà người dùng sẽ nhập một tên như : Alex_Newton,

Tuy nhiên, một số người dùng sẽ sử dụng khoảng trắng thay vì dấu gạch dưới, vì vậy câu hỏi của tôi là:

Làm cách nào để tự động thay thế khoảng trắng bằng Underscores trong PHP?

Câu trả lời:



70

Như những người khác đã giải thích cách sử dụng nó str_replace, bạn cũng có thể sử dụng regex để đạt được điều này.

$name = preg_replace('/\s+/', '_', $name);

11
Đây là một giải pháp tốt hơn theo nghĩa là nó thay thế nhiều khoảng trắng bằng một dấu gạch dưới duy nhất thường là đầu ra mong muốn.
sương giá

5
Ngoài ra các tab và bất cứ điều gì
Loupax





7

Bạn cũng có thể làm điều này để ngăn các từ bắt đầu hoặc kết thúc bằng dấu gạch dưới như _words_more_words_, Điều này sẽ tránh bắt đầu và kết thúc bằng khoảng trắng.

$trimmed = trim($string); // Trims both ends
$convert = str_replace('', '_', $trimmed);

Điều này rất thú vị, vì các khoảng trắng ở đầu / cuối của dòng sẽ không bị thay thế bởi _ mà thay vào đó bị xóa. Mặc dù vậy, hãy nhớ rằng nó có thể / cũng sẽ loại bỏ các ký tự khác từ đầu / cuối chuỗi dưới dạng (\ r và \ n hoặc các tab).
Paul

1

Đây là một phần trong mã của tôi, tạo khoảng trắng thành dấu gạch dưới để đặt tên tệp của tôi:

$file = basename($_FILES['upload']['name']);
$file = str_replace(' ','_',$file);

1

Tôi đã sử dụng như thế này

$option = trim($option);
$option = str_replace(' ', '_', $option);

0

bạn có thể sử dụng str_replace nói tên của bạn là biến$name

$result = str_replace(' ', '_', $name);

một cách khác là sử dụng regex, vì nó sẽ giúp loại bỏ không gian 2 lần, v.v.

  $result=  preg_replace('/\s+/', '_', $name);

0

Strtrthay thế các ký tự đơn thay vì các chuỗi, vì vậy đây là một giải pháp tốt cho ví dụ này. Được cho strtrlà nhanh hơn str_replace(nhưng đối với trường hợp sử dụng này, cả hai đều nhanh vô cùng).

echo strtr('Alex Newton',' ','_');
//outputs: Alex_Newton

Thật tuyệt, nếu một người chuyển đổi không gian thành "_" trong nhiều tệp dài (nhật ký?) Thì điều này có thể nhanh hơn được không? (Mặc dù không có bằng chứng / tài liệu tham khảo, nó có thể là một câu trả lời thú vị cho bất kỳ ai quan tâm đến tốc độ thực hiện).
Paul

Này Paul, tôi sẽ nghĩ như vậy. Hãy thử nó và điểm chuẩn nó.
Thoracius Appotite

0

str_replace- đó là giải pháp rõ ràng. Nhưng đôi khi bạn cần biết chính xác những gì có không gian. Tôi có một vấn đề với không gian từ tập tin csv.

Có hai ký tự nhưng một trong số đó là 0160 (0x0A0) và số khác là vô hình (0x0C2)

giải pháp cuối cùng của tôi:

$str = preg_replace('/\xC2\xA0+/', '', $str);

Tôi đã tìm thấy biểu tượng vô hình từ trình xem HEX từ mc (trình xem nửa đêm - F3 - F9)


Thế còn '/\s+/'?
FlameStorm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.