2010-11-04 6 views
9

Tôi có một file php trong đó có các văn bản sau đây:trình duyệt sẽ hiển thị thay vì '

<div class="small_italic">This is what you´ll use</div> 

Trên một máy chủ, nó xuất hiện như:

This is what you´ll use 

Và ngày khác, như:

This is what you�ll use 

Tại sao có sự khác biệt và tôi có thể làm gì để làm cho nó xuất hiện đúng cách (dưới dạng dấu móc lửng)?


Lưu ý cho tất cả (để tham khảo trong tương lai)

tôi thực hiện/gợi ý Gumbo của Gordon, ngoại trừ tôi thực hiện nó trên một mức độ máy chủ chứ không phải là mức ứng dụng. Lưu ý rằng (a) tôi đã phải khởi động lại máy chủ apache và quan trọng hơn, (b) tôi đã phải thay thế "dữ liệu xấu" hiện có với dữ liệu đã sửa trong mã hóa bên phải.

/etc/php.ini

default_charset = "iso-8859-1"

+8

Dường như vấn đề mã hóa đối với tôi. Dù sao, tại sao bạn không sử dụng ''' thay vì '´' như mọi người khác? : D – Shikiryu

+2

kiểm tra bộ ký tự của tài liệu trả về (tiêu đề) có thể có giải thích, trong mọi trường hợp bạn chỉ có thể sử dụng '’ ' – Hannes

+6

Và tôi sẽ thêm: _Này có mùi giống như Word copy/paste_ – Shikiryu

Trả lời

16

Bạn phải chắc chắn, nội dung được phục vụ với charset đúng:

Hoặc gửi nội dung với một header bao gồm

<?php header("Content-Type: text/html; charset=[your charset]"); ?> 

hoặc - nếu HTTP charset tiêu đề không tồn tại - chèn một <META> element vào <head>

<meta http-equiv="Content-Type" content="text/html; charset=[your charset]" /> 

Giống như tên thuộc tính cho http-equiv là tương đương với một phản ứng tiêu đề http và sử dụng các đại lý nên sử dụng chúng trong trường hợp các tiêu đề http tương ứng không được thiết lập.

EDIT1: Giống như Hannes đã đề xuất trong nhận xét cho câu hỏi, bạn có thể xem tiêu đề được máy chủ web của bạn trả về để xem mã hóa nào phục vụ. Có thể có sự khác biệt giữa hai máy chủ. Vì vậy, hãy thay đổi phần [your charset] ở trên thành máy chủ "đang hoạt động".

EDIT2 để có giải thích chi tiết hơn về lý do, see Gumbo's answer.

+0

Làm thế nào để bạn biết tài liệu của mình là UTF-8? – RoToRa

+6

@Gordon +1. Mọi người nên sử dụng Unicode. – pltvs

+1

Sai. meta ersatz ảnh hưởng đến không có gì. Chỉ có tiêu đề HTTP. –

0

Đặt ký tự trình duyệt của bạn thành giá trị được xác định:

Ví dụ:

<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
0

1) tạo .htaccess tập tin trong thư mục gốc:

AddDefaultCharset utf-8 
AddCharset utf-8 * 
<IfModule mod_charset.c> 
CharsetSourceEnc utf-8 
CharsetDefault utf-8 
</IfModule> 

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

8

Màn hình hiển thị của CHARACTER THAY THẾ (U + FFFD) rất có thể có nghĩa là bạn đang specifying your output là Unicode nhưng dữ liệu của bạn thì không.

Trong trường hợp này, nếu CẤP TÍNH ACCENT´ là ví dụ mã hóa sử dụng ISO 8859-1, nó mã hóa với các chuỗi byte 0xB4 như đó là điểm quy tắc mà nhân vật trong ISO 8859-1. Nhưng chuỗi byte đó là bất hợp pháp trong mã hóa Unicode như UTF-8. Trong trường hợp đó, ký tự thay thế U + FFFD được hiển thị.

Vì vậy, để khắc phục điều này, hãy đảm bảo rằng bạn là specifying the character encoding properly tùy theo thực tế của bạn (hoặc ngược lại).

0

Điều này có thể do dữ liệu bạn chèn vào trang với PHP đang được mã hóa ký tự khác từ chính trang đó (lần lặp lại phổ biến nhất là 1 là Latin 1 và UTF 8 khác). Kiểm tra mã hóa đang được sử dụng cho trang và cho cơ sở dữ liệu của bạn. Rất có thể sẽ không khớp.

1

Giải pháp đơn giản là sử dụng mã ASCII cho các ký tự đặc biệt.

giá trị của apostrophe ký tự trong ASCII là &#8217;. hãy thử đặt giá trị này vào html của bạn và nó sẽ hoạt động đúng cho bạn.

Hy vọng điều này sẽ hữu ích!

+0

ASCII chỉ có một ký tự dấu nháy đơn và đó là 0x27. Tham chiếu ký tự '’ 'đề cập đến ký tự U + 2019 * MARK ĐÚNG TĂNG ĐỘC QUYỀN * trong Unicode. – Gumbo

+0

@Gumbo: QUYỀN Dấu ngoặc kép đơn ** được ** nhân vật chính xác cho một dấu nháy đơn: http://www.languagegeek.com/typography/apostrophes.html – RoToRa

+0

tôi giả sử ông có nghĩa là '’' là một chuỗi ascii tinh khiết chứ không phải so với nhân vật mà nó đại diện là ascii. – Chris

1

Để tóm tắt có thể lên một chút:

  1. Hãy chắc chắn rằng FILE lưu trên máy chủ web có mã hóa ngay
  2. Hãy chắc chắn rằng máy chủ web cũng cung cấp nó với mã hóa ngay
  3. Đảm bảo thẻ meta HTML được đặt thành mã hóa bên phải
  4. Đảm bảo sử dụng ký tự đặc biệt "chuẩn", tức là sử dụng 'thay vì' bạn muốn viết nội dung như "mã của Luke Skywalker"

Để mã hóa, UTF-8 có thể phù hợp với bạn.

Nếu câu trả lời này hữu ích, vui lòng đánh dấu là chính xác hoặc bình chọn. THX

+0

Bạn đã khắc phục được sự cố chưa? – Czar