Các OP không nói lý do tại sao nó không làm việc, nhưng có vẻ là vấn đề liên quan đến việc mã hóa của tập tin. Nếu tôi có một tập tin ANSI mã hóa và tôi làm:
var s = "“This is a test” ‘Another test’";
s = s.replace(/[“”]/g, '"').replace(/[‘’]/g,"'");
document.writeln(s);
tôi nhận được:
"This is a test" "Another test"
tôi chuyển đổi bảng mã UTF-8, cố định có dấu ngoặc kép thông minh (trong đó đã phá vỡ khi tôi đã thay đổi mã hóa), sau đó chuyển đổi trở lại ANSI và vấn đề đã biến mất.
Lưu ý rằng khi tôi sao chép và dán các đôi và đơn dấu ngoặc kép thông minh ra khỏi trang này vào tài liệu thử nghiệm của tôi (ANSI mã hóa) và chạy mã này:
var s = "“This is a test” ‘Another test’";
for (var i = 0; i < s.length; i++) {
document.writeln(s.charAt(i) + '=' + s.charCodeAt(i));
}
tôi phát hiện ra rằng tất cả các dấu ngoặc kép thông minh xuất hiện như ? = 63
.
Vì vậy, đối với OP, xác định nơi báo giá thông minh bắt nguồn và đảm bảo chúng là mã ký tự bạn mong đợi. Nếu không, hãy cân nhắc việc thay đổi mã hóa của nguồn để chúng đến như “ = 8220
, ” = 8221
, ‘ = 8216
và ’ = 8217
. Sử dụng vòng lặp của tôi để kiểm tra nguồn, nếu các dấu ngoặc kép thông minh hiển thị với bất kỳ giá trị charCodeAt()
nào khác với các giá trị tôi đã liệt kê, replace()
sẽ không hoạt động như được viết.
Nguồn
2009-09-17 15:11:00
Đây có thể là sự cố mã hóa ký tự. Bạn sử dụng mã hóa nào trong mã của mình và mã hóa nào có dữ liệu của bạn? – Gumbo