2011-11-17 35 views
18

Tôi đang cố gắng để thay thế tất cả các không gian với dấu gạch dưới và sau đây không được làm việc:preg_replace tất cả các không gian

$id = "aa aa"; 
echo $id; 
preg_replace('/\s+/', '_', $id); 
echo $id; 

in

aa aaaa aa 

Trả lời

54

Chức năng preg_replace không modi fy chuỗi tại chỗ. Nó trả về một chuỗi mới với kết quả của sự thay thế. Bạn nên gán kết quả của các cuộc gọi trở lại $id biến:

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

Lưu ý rằng nếu trang của bạn được mã hóa bằng UTF-8 thì bạn phải thêm công cụ sửa đổi unicode vào cuối biểu thức chính quy, để nó trở thành preg_replace ('/ \ s +/u ',' _ ', $ id); Việc không thêm điều này có thể gây ra các ký tự không hợp lệ trong văn bản được mã hóa UTF-8 của bạn. Xem: https://stackoverflow.com/q/43849130/649497 – BruceHill

11

Bạn đã quên gán kết quả của preg_replace vào $id của bạn

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

Tôi nghĩ str_replace() có thể thích hợp hơn ở đây:

$id = "aa aa"; 
$id = str_replace(' ', '_', $id); 
echo $id; 
+0

Mã này không tái tạo những gì OP đang cố gắng thực hiện. –

+3

@VincentSavard: "thay thế tất cả các dấu cách bằng dấu gạch dưới" ... Tôi nghĩ vậy :) – Clive

+0

Câu của anh ta rời khỏi nơi diễn giải, nhưng mã của anh ấy không. Mã của bạn sẽ thay thế mọi không gian đơn thành dấu gạch dưới, trong khi ông dường như muốn thay thế mọi nhóm ký tự trắng thành một dấu gạch dưới đơn. –

2

Chúng ta cần phải thay thế các không gian trong chuỗi "aa aa" với '_' (gạch dưới). \ S + được sử dụng để khớp với nhiều dấu cách. Đầu ra sẽ là "aa_aa"

<?php 

$id = "aa aa"; 
$new_id = preg_replace('/\s+/', '_', $id); 
echo $new_id; 

?> 
+0

Bạn có thể cung cấp giải thích về cách mã này hoạt động không? – LThode

+0

Chúng ta cần thay thế khoảng trắng trong chuỗi "aa aa" bằng dấu "_" (dấu gạch dưới). \ s + được sử dụng để khớp với nhiều không gian. Đầu ra sẽ được "aa_aa" – Suja

+0

chỉnh sửa câu trả lời của bạn, vui lòng – LThode

Các vấn đề liên quan