Database MSSQL bị lỗi font khi dùng CKEditor (có hình ảnh đầy đủ)

Chào mọi người, em đang làm cái web ASP.NET MVC

Em có tạo một cái CKEditor để lưu nội dung của một bài viết.


Ban đầu em bấm kiểm tra Source trong khung ckeditor thì thấy nó lỗi font:

Nên em thêm một số config cho cái CKEditor:

Thì nó trở lại bình thường:

Sau đó em add vào Database dùng Entity Framework:

Vào kiểm tra thì cái nội dung ấy bị lỗi font chữ, trong khi các trường khác dùng @Html.TextBoxFor() được add vô cùng lúc thì ko bị lỗi font chữ:

Mong được mọi người giải quyết lỗi, rất cảm ơn mọi người.

Cái chỗ bạn nói là “lỗi” đó chính là một tính năng gọi là HtmlEncode (mã hóa HTML).
Khi bạn gán thuộc tính ForceSimpleAmpersand = true thì các kí tự đặc biệt (hình như chỉ những kí tự từ 128 - 255) sẽ không được mã hóa HTML. Thế nên bạn mới thấy “hết lỗi”.

Theo hình thì khi lưu vào CSDL thì tất cả các kí tự Unicode đều trở thành ? và các kí tự ANSI (128 - 255) đều mất dấu (ư -> u, ơ -> o, é -> e,…).
Cột CourseDescription có để kiểu nvarchar không?

4 Likes

Cột CourseDescription mình có để kiểu NVARCHAR bạn:


Collation của Database là :Latin1_General_100_CI_AI:

Mình vừa tìm kiếm, các câu hỏi về vấn đề này hầu hết đều không có câu trả lời. Có lẽ lỗi phần lớn do lỗi từ CKEditor.

Bạn thử in ra (console, server log,…) chuỗi được gửi lên trước khi lưu vào CSDL xem nó có bị gì không.

4 Likes

Mình bật Debug bên Controller thì thấy biến description đã được truyền giá trị vào không bị lỗi font

Mình Console.Log ra nó vẫn bình thường không bị lỗi:

Bây giờ còn cái giai đoạn mà Entity Framework nó truyền vào Database thôi ko biết có bị gì không. (Cái này thì mình chịu không biết kiểm bằng cách nào nữa)

bạn thêm cái CKEditor vào trang web thế nào :V Có thể vì 1 lý do nào đó nó ko chuyển html output của ckeditor thành utf-16? Thử làm theo link này xem :V

lúc CreateCourse thì thử lấy html output từ ckeditor:

string ckInput = Request.Form["editor1"];

rồi xem nó in ra cái gì. Rồi thử chuyển nó thành UTF8 hay UTF16 loạn xạ lên tới khi nào được thì thôi =]

5 Likes

Latin1 ko lỗi font tiếng việt thì hơi phí :))

1 Like

Latin1 là kiểu thích hợp để lưu tiếng việt mà bạn. Trong SQLSERVER đâu có kiểu utf8

CKEditor và MS SQL Server không có lỗi gì ở đây. Lỗi ở đây đang ở dạng “đọc ngôn ngữ của nước khác theo ngôn ngữ của tiếng mẹ đẻ”. Kiểu như The dog is black (đọc tiếng Việt là the đo gờ i sờ bờ lác).

Nói một cách kỹ thuật IT hơn chút, khi submit & xử lý dữ liệu cần phải quan tâm đến charset, encoding, collation. Trên Windows, .NET còn có thêm cái gọi là “code page” nữa. Khi không hiểu được mấy thứ đó, trước sau gì cũng “đụng chiện” xảy ra giun dế, dấu hỏi với các thứ tiếng không phải tiếng Anh.

Việc lưu các chuỗi text vào database không phải lúc nào cũng có thể mở trình DBMS lên để đọc nội dung giống như ta đọc text được nhập trong ô soạn thảo trên web. Nói cách khác, khi lưu là một dạng được mã hóa, nó giun dế gì kệ nó, khi load lên để hiển thị thì ta phải giải mã hiển thị đọc được.

Tra trên web của Microsoft thấy SQL Server 2019 có nhiều cải tiến so với các phiên bản trước trong việc xử lý Unicode, thử dùng nó. Nếu vẫn dùng SQL Server phiên bản cũ, khuyên dùng Collation Latin1_General_100_CI_AS_SC. Tham khảo thêm bài này và một bài khác.

4 Likes

anh này cũng bị, EF nó truyền varchar chứ ko phải nvarchar?
thử đổi cột nvarchar(max) kia thành nvarchar(1000) thử xem? :V :V :V

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/92f1381c-5461-4275-8059-d9818f0a68dc/how-to-save-chinese-characters-into-sql-server-with-entity-framework-c?forum=visualstudiogeneral

I fix the issue.

Originally Entity Framework was generated with string type varchar. When I changed the database string type to nvarchar, the Entity Framework still works with varchar type. After I change the string type to nvarchar, I just regenerate a new Entity Framework. and then the chinese characters can be inputted to SQL server database.

:V

5 Likes

Mình đã tìm ra giải pháp để giải quyết. Rất cảm kích về những lời đóng góp của các bạn. Cảm ơn mọi người.
P/S:
=> Khi muốn add dữ liệu của CKeditor vào database SQL Server bằng Entity Framework ko bị lỗi Tiếng Việt thì trường để lưu phải là Nvarchar(max), không được để Text (như MySql)
Ngoài ra để chắc chắn phải thêm một số cấu hình cho Ckeditor:

2 Likes

Bạn vui lòng chia sẻ giải pháp của bạn để những người gặp lỗi tương tự có thể tham khảo.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?