2012-08-28 27 views
5

Tôi đang làm việc trên trang web sử dụng/lưu trữ các ký tự có dấu trọng âm trong cơ sở dữ liệu. Tôi có trang mẫu thiết lập để các config.php biến charset phù hợp với khung cảnh, ví dụ:Bộ mã cấu hình CodeIgniter và hỗ trợ UTF-8

<meta charset="<?php echo $this->config->item('charset');?>"> 

Vấn đề tôi đang gặp là, khi $config['charset'] được thiết lập để UTF-8, hình thức xác thực không thành công và dường như không có ký tự nào được gửi nếu có một ký tự có dấu. Vì vậy, ví dụ, một trường bắt buộc sẽ trả về nếu á được đưa vào bất kỳ vị trí nào trong chuỗi. Chuỗi trừ á làm việc tốt.

tôi đã quản lý để làm việc này bằng cách thay đổi $config['charset'] để ISO-8859-1 và chuyển đổi văn bản sang UTF-8 trước khi chèn/sau khi lấy từ cơ sở dữ liệu với php của utf8_encode()utf8_decode(). Đây có phải là cách tốt nhất hoặc tôi thiếu một cái gì đó cần thiết để có được UTF-8, với các nhân vật có dấu, làm việc trong CodeIgniter?

Bất kỳ lời khuyên nào được đánh giá cao.

+0

Đảm bảo bạn đặt ở mọi nơi UTF-8. Thật khó để nói những gì sai, nhưng có lẽ tại một số điểm bạn có một bộ ký tự khác nhau. Phải đọc: http://www.joelonsoftware.com/articles/Unicode.html. – Styxxy

Trả lời

12

Bạn phải đảm bảo rằng bạn sử dụng UTF-8 ở mọi nơi và cả PHP và MySQL đều được định cấu hình để xử lý UTF-8.

Trong html, thêm thẻ meta:

<meta charset="utf-8" /> 

Và lưu nó ở định dạng UTF-8. ở đây là how to do that in notepad++.

Xác định các bảng MySQL để hỗ trợ UTF-8, tạo bảng với:

DEFAULT CHARSET=utf8; 

Và thiết lập các kết nối đến:

mysql_set_charset('utf8', $con); 

Enable UTF-8 trong php.ini:

default_charset = "utf-8" 

Để có toàn bộ séc thủ công Handling Unicode Front To Back In A Web App

+0

Rất cám ơn câu trả lời và liên kết - Tôi sẽ kiểm tra để đảm bảo UTF-8 đang được sử dụng trong suốt. Vấn đề xác thực biểu mẫu đã được gây ra bởi cài đặt $ config ['charset'] được đặt thành 'UTF-8' (tất cả chữ hoa) thay vì 'utf-8' (tất cả chữ thường). Vì một số lý do, thiết lập mặc định cho chữ hoa này là 'UTF-8' không hoạt động (ít nhất là không phải trên thiết lập của tôi). –

+0

mát mẻ, vui lòng trợ giúp :) +1 – Kuf

+0

Nhận xét nhỏ cho những người đã tìm thấy nó trên google - nguồn thay thế của vấn đề này có thể là bảng mã _or column_ (có, thay đổi mã hóa bảng không thay đổi mã hóa của các cột riêng lẻ) - trong trường hợp giá trị chỉnh sửa trong một cột có chuỗi UTF-8 sẽ dẫn đến cảnh báo "Giá trị chuỗi không chính xác", điều này không hiển thị khi bạn chỉ cần chạy truy vấn thông qua trình mã hóa. Tất cả bạn sẽ thấy là? thay vì UTF-8 char . – MarcinWolny

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