2013-02-01 38 views
5

Tôi nhận được hộp lovely đáng yêu, nơi các ký tự tiếng Tây Ban Nha sẽ được hiển thị. (ví dụ: ñ, á, vv). Tôi đã thực hiện chắc chắn rằng meta http-equiv của tôi được thiết lập để utf-8:Ký tự tiếng Tây Ban Nha không hiển thị chính xác

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

tôi cũng đã thực hiện chắc chắn rằng tiêu đề trang được thiết lập cho utf-8 cũng:

header('Content-type: text/html; charset=UTF-8'); 

đây là các giai đoạn bắt đầu của mã của tôi, cho đến thời điểm này:

<?php 
    setlocale(LC_ALL, 'es_MX'); 
    $datetime = strtotime($event['datetime']); 
    $date = date("M j, Y", $datetime); 
    $day = strftime("%A", $datetime); 
    $time = date("g:i", $datetime); 
?> 
    <a href="/<?= $event['request'] ?>.html"><?= $day ?> <?= $time ?></a> 

Mã trên nằm trong tuyên bố vị trí. Tôi đã đọc rằng việc chuyển đổi collation trong cơ sở dữ liệu cũng có thể là một yếu tố nhưng tôi đã có nó đặt thành UTF-8 General ci. Thêm vào đó, điều duy nhất trong cột đó là DateTime dù sao là số và không thể đối chiếu được.

kết quả: s bado 8:00

Bất kỳ trợ giúp nào được đánh giá cao như mọi khi.

+0

bạn có buộc kết nối cơ sở dữ liệu mysql php phải là UTF không? có một db và đầu ra php của bạn trong UTF là vô nghĩa nếu kết nối php-> mysql là cái gì khác. đường dẫn hiển thị ** ENTIRE ** phải là bộ ký tự giống nhau hoặc được kết hợp với logic chuyển đổi bộ ký tự thích hợp ... nếu có sự không phù hợp ở bất kỳ giai đoạn nào, bạn sẽ nhận được các ký tự bị hỏng. –

+0

Có phải default_charset cho php được đặt thành utf-8 không? – PoX

+0

Có, tôi thiết lập kết nối với UTF 8 cũng ... mysql_set_charset ('utf8', $ connnection); – NotJay

Trả lời

6

Những điều cần xem xét trong PHP/MySQL/UTF-8

  • Các bảng cơ sở dữ liệu và các cột văn bản nên được thiết lập để UTF-8
  • trang HTML Content-Type nên được đặt thành UTF-8

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

  • PHP nên gửi một tiêu đề thông báo cho trình duyệt để mong đợi UTF-8

    header('Content-Type: text/html; charset=utf-8');

  • Kết nối PHP-MySQL nên được đặt thành UTF-8

    mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn);

    mysqli_query("SET CHARACTER_SET_RESULTS='utf8'",$conn);

    mysqli_query("SET CHARACTER_SET_CONNECTION='utf8'",$conn);

  • PHP ini đã default_charset đặt nó nên utf- 8 nếu bạn không có quyền truy cập vào nó sử dụng ini_set('default_charset', 'utf-8');

+0

Cảnh báo: mysqli_query() hy vọng tham số 1 là mysqli, chuỗi được đưa ra – NotJay

+0

bạn đang chuyển $ conn dưới dạng liên kết db phải không? – PoX

+0

$ conn = mysql_connect ("máy chủ", "người dùng", "vượt qua"); – NotJay

0

điều quan trọng là phải kiểm tra xem mã của bạn cũng được mã hóa là UTF-8 (bạn có thể xem thuộc tính này trong nhiều trình chỉnh sửa văn bản và mã).

Vì chỉ có một biểu tượng (hình vuông màu đen), có thể là bạn đang sử dụng ISO-8859-1 hoặc ISO-8859-15.

0

Bạn có thể thấy nội dung chính xác trong bảng cơ sở dữ liệu hay không, hãy xem nó bằng phpmyadmin ví dụ: Nếu có, hãy đảm bảo các tệp php của bạn được mã hóa utf8, hãy xem cấu hình ide/editor của bạn.

4

Tôi đã gặp vấn đề này trong nhiều năm và tôi không thể tìm thấy bất kỳ logic nào và tôi đã thử tất cả các giải pháp ở trên.

Một giải pháp là tạo mã html cho tất cả văn bản. Đây là một chức năng tôi đã sử dụng khi mọi thứ khác không thành công.

function span_accent($wordz) 
{ 

$wordz = str_replace("Á","&Aacute;",$wordz); 
$wordz = str_replace("É","&Eacute;",$wordz); 
$wordz = str_replace("Í","&Iacute;",$wordz); 
$wordz = str_replace("Ó","&Oacute;",$wordz); 
$wordz = str_replace("Ú","&Uacute;",$wordz); 
$wordz = str_replace("Ñ","&Ntilde;",$wordz); 
$wordz = str_replace("Ü","&Uuml;",$wordz); 

$wordz = str_replace("á","&aacute;",$wordz); 
$wordz = str_replace("é","&eacute;",$wordz); 
$wordz = str_replace("í","&iacute;",$wordz); 
$wordz = str_replace("ó","&oacute;",$wordz); 
$wordz = str_replace("ú","&uacute;",$wordz); 
$wordz = str_replace("ñ","&ntilde;",$wordz); 
$wordz = str_replace("ü","&uuml;",$wordz); 

$wordz = str_replace("¿","&iquest;",$wordz); 
$wordz = str_replace("¡","&iexcl;",$wordz); 
$wordz = str_replace("€","&euro;",$wordz); 
$wordz = str_replace("«","&laquo;",$wordz); 
$wordz = str_replace("»","&raquo;",$wordz); 
$wordz = str_replace("‹","&lsaquo;",$wordz); 
$wordz = str_replace("›","&rsaquo;",$wordz); 
return $wordz; 
} 
+0

Bạn sẽ có thể sử dụng htmlentities: http://php.net/manual/ vi/function.htmlentities.php –

2

Vui lòng kiểm tra tệp của bạn ENCODING. Nó phải ở dạng UTF-8 hoặc UTF-8 mà không có BOM.

Để thay đổi mã hóa tệp của bạn. Sử dụng Notepad ++ (bạn cũng có thể sử dụng trình soạn thảo khác, nơi bạn có thể thay đổi mã hóa tệp). Trong thanh trình đơn> Chọn ENCODING> Chọn bất kỳ UTF-8 hoặc UTF-8 nào không có BOM.

Xem liên kết cho sự khác biệt của UTF-8 và UTF-8 mà không có BOM. What's different between UTF-8 and UTF-8 without BOM?

Hy vọng điều đó có thể hữu ích. :)

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