Làm cách nào để hiển thị văn bản trong UTF8 từ mysql / phpmyadmin?


5

Tôi có một cơ sở dữ liệu với nhiều bảng. Cơ sở dữ liệu và bảng và mỗi hàng của bảng được đặt thành utf8_romanian_ci.

Mỗi tên tôi nhập có chứa dấu phụ sẽ không được hiển thị chính xác.

Ví dụ: Nếu tôi giới thiệu MaÂehxtrong bảng, tôi vừaM

Dữ liệu từ bảng được nhập từ csvtệp. Trong Excel, dấu phụ xuất hiện bình thường.

Làm thế nào tôi có thể giải quyết điều này?


Xin chào UTF8, tôi thấy bạn mới bắt đầu trên trang web, vì vậy hãy nhớ chấp nhận câu trả lời nếu nó giải quyết được vấn đề. Cảm ơn!
zx81

Câu trả lời:


4

UTF-8 là một tình nhân hay thay đổi. Đối với một ứng dụng web thông thường, bạn phải đặt UTF-8 ở nhiều cấp độ. Ngay cả khi mã phpMyAdmin hoạt động tốt với UTF8, nó không hoạt động trong môi trường chân không: cấu hình máy chủ rất quan trọng. Cơ sở dữ liệu cũng vậy, và nguồn dữ liệu cho cơ sở dữ liệu cũng vậy. Chúng ta hãy tóm tắt các khu vực ma sát tiềm năng trong một ứng dụng chung, với trọng tâm cụ thể là các lĩnh vực quan tâm đến phpMyAdmin.

A. Nguồn dữ liệu

Khi dữ liệu được nhập vào cơ sở dữ liệu, chẳng hạn như từ tệp văn bản, nó phải có mã hóa đúng. Các dấu phụ có thể được hiển thị trong Excel, nhưng mã hóa có thể là bất cứ điều gì. Vì vậy, bạn có thể có một tệp CSV trông đúng nhưng không nhập đúng. Bạn có thể kiểm tra và chuyển đổi mã hóa tệp CSV của mình trong trình chỉnh sửa văn bản như EditPad hoặc IDE như Komodo. Trong Notepad ++, mà nhiều người có, bạn có thể chọn "Mã hóa" để xem mã hóa hiện tại của mình và bạn có thể chọn Mã hóa / Chuyển đổi sang UTF8 khi cần.

B. Trong cơ sở dữ liệu của bạn. Bộ ký tự và đối chiếu của bảng phải được đặt thành UTF-8. Có vẻ như bạn có thể đã làm như vậy.

Nếu không, bạn cần một cái gì đó như:

ALTER TABLE MyTable
DEFAULT CHARACTER SET utf8,
COLLATE utf8_general_ci;

Đó là cài đặt chung, nhưng đối chiếu Rumani của bạn cũng sẽ hoạt động tốt.

C. Kết nối với cơ sở dữ liệu. Bạn cần một cái gì đó như:

$connectDSN = "mysql:host={$db_host};dbname={$db_name};charset=UTF-8";

PhpMyAdmin nên kết nối chính xác. Trên trang đích, bạn sẽ thấy

Server charset: UTF-8 Unicode (utf8) 

Nếu không, hãy tiếp tục đọc.

D. php phải xử lý UTF8. Trong php.ini, bạn sẽ muốn một cái gì đó như:

default_charset = UTF-8     
mbstring.language = Neutral 
mbstring.internal_encoding = UTF-8      
mbstring.encoding_translation = On      
mbstring.http_input = auto      
mbstring.http_output = UTF-8        
mbstring.detect_order = auto        
mbstring.substitute_character = “0xFFFD”    

Bạn có thể kiểm tra cài đặt máy chủ của mình bằng phpinfo (). Trên máy chủ được chia sẻ, bạn thường không có quyền truy cập vào php.ini và phải thay đổi cài đặt trực tiếp trong tập lệnh. Nhân tiện, hãy nhớ sử dụng các hàm mb.

E. Thiết lập tiêu đề

Để trình duyệt biết những gì nó đang nhận, nó cần nhận một tiêu đề như sau đây được gửi bởi php:

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

Đây không phải là một vấn đề với phpMyAdmin. Trong Firefox, sử dụng tiện ích mở rộng Web Developer, bạn có thể truy cập Thông tin / Xem thông tin trang. Trong tab Chung, điều này sẽ hiển thị cho bạn mã hóa.

F. Thẻ Meta HTML

Điều này được khuyến nghị để giúp trình duyệt.

<meta charset="UTF-8">

Đây không phải là một vấn đề với phpMyAdmin. Một lần nữa kiểm tra trong trình duyệt những gì nó đang mã hóa.

G. Phông chữ

Trình duyệt có thể không có phông chữ để hiển thị một số ký tự, mặc dù các phiên bản hiện đại khá tốt về phông chữ dự phòng. Đây có lẽ không phải là một vấn đề trong trường hợp của bạn.

Vì vậy, có nhiều nơi mà mọi thứ có thể đi sai.

Hy vọng điều này sẽ giúp bạn xác định vấn đề!

Khi mọi thứ xếp thành hàng, rồi phép màu ... Bạn có UTF8 ở mọi nơi.

Và đừng quên:

ಇಲ್ಲಿ ಸಂಭವಿಸು ಇಂದೆನ್ನ

ಅವತರಿಪ ಸತ್ಯಾವತಾರ


Tôi biết đây là một câu trả lời cũ, đã mysqli_set_charset($this -> link , 'utf8');khắc phục vấn đề của tôi, đó là 'sự phá vỡ chuỗi' của tôi nếu bạn thích :-)
Edward
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.