2008-10-27 42 views
17

Tôi có một máy chủ sao lưu tự động sao lưu trang web trực tiếp của tôi, cả tệp và cơ sở dữ liệu.Ký tự dấu chấm hỏi hiển thị trong văn bản, tại sao lại như vậy?

Trên trang web trực tiếp, văn bản có vẻ tốt, nhưng khi bạn xem phiên bản được nhân đôi của nó, nó sẽ hiển thị '?' trong một số văn bản. Văn bản này được lưu trữ trong bảng cơ sở dữ liệu tin tức.

Đây là ảnh chụp màn hình của nó trên máy chủ trực tiếp và trên máy chủ được nhân đôi.

Điều gì có thể xảy ra trong quá trình sao lưu máy chủ lên máy chủ được nhân đôi? alt text http://i34.tinypic.com/2mpbfo6.jpg

Trả lời

15

xem các bài viết sau đây sẽ hữu ích

http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

Sau khi bạn kết nối với các vấn đề cơ sở dữ liệu lệnh sau:

SET TÊN 'utf8 ';

Đảm bảo rằng trang web của bạn cũng sử dụng bảng mã UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

PHP cũng cung cấp một số chức năng sẽ hữu ích cho chuyển đổi:

http://us3.php.net/manual/en/function.iconv.php

http://us.php.net/mb_convert_encoding

0

Unicode hoặc các ký tự bộ ký tự khác rơi qua?

Tôi đã thấy các ký tự "lạ" tương tự xuất hiện trên các trang web mà tôi thường xuyên làm việc khi văn bản được sao chép từ email hoặc một số định dạng tài liệu khác (ví dụ: từ) vào trình chỉnh sửa văn bản. Trình chỉnh sửa có thể hiển thị các ký tự không phải ASCII nhưng trình duyệt không thể. Đối với trang web, tôi khuyên bạn nên tra cứu mã thực thể HTML cho ký tự đó và chèn mã đó thay thế ... hoặc chuyển sang các tiêu chuẩn khác.

1

Trình duyệt của bạn đã không giải thích mã hóa trang một cách chính xác (vì bạn đã buộc trang đó vào một cài đặt cụ thể hoặc trang được đặt không chính xác) và do đó không thể hiển thị một số ký tự.

1

Điều này sẽ liên quan đến mã hóa ký tự.

Bạn có chắc chắn trang web được nhân đôi có cùng thuộc tính liên quan đến mã hóa ký tự làm máy chủ chính của bạn không?

Tùy thuộc vào loại máy chủ bạn có, đây có thể là thuộc tính của quy trình máy chủ hoặc có thể là biến môi trường.

Ví dụ: nếu đây là môi trường UNIX, có lẽ thử so sánh LANG hoặc LC_ALL?

cũng here

+0

Máy chủ trực tiếp là Solaris, máy chủ được nhân đôi là Linux rhel5, nếu điều đó tạo nên sự khác biệt. – Brad

+0

Linux cũng sử dụng LANG/LC_ALL. Xem ví dụ: http://www.linux.com/base/ldp/howto/Indic-Fonts-HOWTO/locale.html – toolkit

+0

Và cũng xem liệu bạn có thể kiểm tra tiêu đề HTTP được trả lại từ cả hai máy chủ hay không, để tìm kiếm hiển nhiên sự khác biệt liên quan đến mã hóa ký tự. – toolkit

0

Kiểm tra bộ ký tự được phát ra bởi serv được nhân đôi của bạn er. Dường như có sự khác biệt so với máy chủ chính - trang web trực tiếp dường như xuất ra Unicode, trong đó máy nhân bản không có.Ngoài ra, nó thường là một ý tưởng tốt để chà ký tự Unicode trong nội dung gửi đến của bạn và thay thế chúng bằng các thực thể HTML thích hợp của chúng.

Vấn đề cụ thể của bạn liên quan đến "dấu ngoặc kép thông minh", "dấu gạch ngang" và "dấu gạch ngang." Tôi biết bạn có thể thay thế dấu gạch ngang của mình bằng &mdash; và n-dấu gạch ngang với &ndash; (nên được thực hiện ở phía đầu vào của cơ sở dữ liệu của bạn); Tôi không biết những gì thay thế chính xác cho các dấu ngoặc kép thông minh sẽ được. (Tôi thường chỉ thay thế tất cả các dấu ngoặc kép đơn với 'và tất cả dấu ngoặc kép đôi với "... Geeks Typography có thể cảm thấy tự do để bắn tôi nhìn thấy.)

Tôi nên lưu ý rằng một số trình duyệt được tha thứ hơn những người khác với điều này .. vấn đề - Internet Explorer trên Windows có xu hướng tự động phát hiện và kỳ diệu "sửa chữa" này; Firefox và hầu hết các trình duyệt khác hiển thị dấu hỏi

0

tôi thường nguyền rủa MS Word và sau đó chạy Wscript sau

// thay thế bằng đường dẫn đến tệp cần làm sạch
PATH = "test.html"

var go = WScript.CreateObject ("Scripting.FileSystemObject");
var content = go.GetFile (PATH) .OpenAsTextStream(). ReadAll();
var out = go.CreateTextFile ("clean -" + PATH, true);

// ký
content = content.replace (/ “/ g, '"');
content = content.replace (/”/ g, '"');
content = content.replace (/ ’/ g," '");
content = content.replace (/ -/g, "-");
content = content.replace (/ ©/g, "& sao chép;");
content = content.replace (/ ®/g, "& reg;");
content = content.replace (/ °/g, "& deg;");
content = content.replace (/ ¶/g, "<p>");
content = content.replace (/ ¿/ g, "& iquest;");
content = content.replace (/ ¡/ g, '& iexcl;');
content = content.replace (/ ¢/g, '& cent;');
content = content.replace (/ £/g, '& pound;');
content = content.replace (/ ¥/g, '& yen;');

out.Write (nội dung);

9

Chỉnh sửa tập tin cấu hình Apache trên "gương" máy chủ (server với vấn đề này), và bình luận ra các dòng sau:

AddDefaultCharset UTF-8 

Sau đó khởi động lại Apache:

service httpd restart 

Vấn đề là dòng "AddDefaultCharset UTF-8" ghi đè loại nội dung được chỉ định trong tệp .html; ví dụ.:

<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> 

Triệu chứng phổ biến nhất là mã ký tự trên 127 hiển thị dưới dạng kim cương đen có dấu hỏi (trong Chrome, Safari hoặc Firefox) hoặc hộp nhỏ (trong IE và Opera). Các tệp HTML do Microsoft Word tạo thường có nhiều ký tự như vậy, ký tự phổ biến nhất là mã ký tự 160 = 0xA0, tương đương với "& nbsp;" trong mã hóa Windows 1252, và thường được tìm thấy giữa các thẻ span, như thế này:

<span style="mso-spacerun: yes">ááá </span> 
+1

Nhận xét ra dòng ký tự mặc định đã hoạt động đối với tôi, cần có ISO-8859-1. Chúc mừng. – Ollie

+1

Đây là vấn đề của tôi. Tôi hoàn toàn quên về việc xác định bộ ký tự trong tệp cấu hình của mình. –

+1

Yup, đó là vấn đề của tôi - bộ ký tự được đặt cho UTF-8, nhưng các ký tự là windows-1252. Đó là những gì tôi nhận được để dán bản sao từ một tài liệu từ –

3

Tôi đã ở đây tìm kiếm một giải pháp cho hoạt Javascript hiển thị trong trình duyệt và mặc dù không liên quan trực tiếp với cơ sở dữ liệu ...

Trong trường hợp của tôi, tôi đã sao chép và dán một số văn bản tôi tìm thấy trên internet vào một tệp JavaScript và lưu nó bằng Windows Notepad.

Khi trang có sử dụng JavaScript tập tin đầu ra các chuỗi có dấu hỏi (giống như những người thể hiện trong câu hỏi) thay vì các ký tự đặc biệt như chữ cái có dấu vv

Tôi mở tập tin sử dụng Notepad++. Ngay sau khi mở file tôi thấy rằng mã hóa ký tự đã được thiết lập như ANSI như bạn có thể nhìn thấy (con trỏ chuột trên footer) trong hình bên dưới:

enter image description here

Để giải quyết vấn đề này, nhấp vào Encoding menu trong Notepad++ và chọn Encode in UTF-8. Bạn sẽ được tốt để đi. :)

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