בעיה מוזרה עם עברית

cprog

New member
בעיה מוזרה עם עברית

היי לכולם.
אני עובד על אתר ושומר אינפורמציה ב MySQL אח"כ מושך את האינפורמציה עם AJAX.

הבעיה: משום מה טקסט בעברית שמגיע מה DB מוצג בצורה של code point, והקטע המוזר: אם אני לוקח את ה string שקראתי מה DB ושם אותו Hard Coded ב source, זה מוצג כמו שצריך.

אגב, במקומות אחרים בעמוד, עברית מוצגת כמו שצריך (ראו מסגרת בצהוב).

מה קורה פה?

 

ניאו11

New member
יש לזה כל מיני פתרונות

יש לך בהגדרה ש כל טבלה עמודה שנקראת COLLATION
אתה יכול להגיד מה מוגדר לך שם בעמודות שאתה מכניס להם מידע בעברית?
&nbsp
&nbsp
&nbsp
 

cprog

New member
תודה על התשובה. עוד פרטים

השדות מוגדרים כ
קוד:
title VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
writer  VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
content VARCHAR(16384) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
כאמור, שדה content דווקא מוצג כמו שצריך, אבל title, writer אינם מוצגים כמו שצריך.
בעמוד שלי גם מוגדר:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 

ניאו11

New member
תנסה להוסיף את השורה הבאה בראש העמוד שמציג את העברית מהDB

mysql_query("SET NAMES 'hebrew'");
&nbsp
תגיד אם זה עזר
 

cprog

New member
מצאתי חלק מהבעיה, אבל יש עניין שאינני מבין עדיין

אני דיי סגור על זה שכל עניין ה encoding והשימוש ב UTF8 נכון אצלי.
בעיה אחת שמצאתי זה שב DB השדה היה קצר מדי VARCHAR(64) וזה קטע את ה String באמצע.

אבל זה לא פתר את בעית התצוגה.

יחד עם זה אפשר לראות בצילום המסך בהודעה המקורית שעברית ששמרתי ב DB דווקא כן מוצגת נכון (במסגרת הצהובה).
מעבר מהיר על הקוד הראה שה String הזה נשמר כחלק מ JSON וכאני עושה לו parse העברית מתקבלת בצורה נכונה.
מכאן עד לשמור את הטקסט שלי כ JSON הדרך קצרה, אז השדה ב SQL נשמר ככה
{"text":"\u05db\u05d5\u05ea\u05e8\u05ea \u05d1\u05e2\u05d1\u05e8\u05d9\u05ea"}
אבל העניין הבאמת לא מובן זה למה אם אני שומר את העברית רק כ String ולא כ JSON אינני מצליח להציג אותה.
במצב הזה השדה נראה ככה:
"\u05db\u05d5\u05ea\u05e8\u05ea \u05d1\u05e2\u05d1\u05e8\u05d9\u05ea"

וכאשר אני שומר את זה ככה, הדפדפן מציג את זה כמו plain text ולא בעברית.
מישהו מכם יודע למה אני צריך לעבוד עם JSON כדי להציג את זה בעברית?
זה מעניין.
 

cprog

New member
מצאתי את הבעיה

על הדרך אני פותר עוד בעיות עד שהצלחתי להתמקד על זה.
הבעיה נעוצה בכך שהשתמשתי ב post של AJAX ושם לא היתה הגדרה של charset. בהמשך השמשתי ב ajax עם ההגדרה של charset שפתרה את העניין.

כשירות לציבור, הנה דוגמא:
קוד:
// This did not work
$.post('xxx.php',	// Send everything to server with AJAX
		{'A': 'B', 'C': 'D' },
			function(data, status, xhr) {
				do_something();
		})
		.fail(function(jqxhr, settings, ex) { alert('failed, ' + ex); });

// This is the fix, defining content type
$.ajax({
url: 'xxx.php',	// Send everything to server with AJAX
type: 'POST',
data: {'A': 'B', 'C': 'D' },
contentType: 'application/x-[URL='http://www-form-urlencoded']www-form-urlencoded[/URL]; charset=UTF-8',
dataType: 'json'
 })
.done(function(data) {
			do_something();
})
.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
 
למעלה