הרשם שאלות ותשובות רשימת חברים לוח שנה הודעות מהיום

חזור   הוסטס - פורום אחסון האתרים הגדול בישראל > עיצוב גראפי, תכנות על כל שפותיו וקידום ושיווק אתרים > פורום תיכנות

   
|!|

השב
 
כלים לאשכול תצורת הצגה
ישן 04-05-12, 13:54   # 1
Jenya
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Mar 2012
הודעות: 133

Jenya לא מחובר  

בעיית קידוד utf-8 עברית ב-mysql



אני כותב, עורך, מוחק נתונים מהמסד דרך קבצי php, כל הקבצים מקודדים utf-8 without bom

כל המסדים utf-8 general ci

עכשיו איפה שיש את ה- $times זה כאשר אני מוסיף נתונים, והם מופיעים אצלי בתור ×�×�×�ש×�×�

כל השאר שרואים ג'יבריש, זה אחרי שאני מעדכן, והם מופיעים בתור עברית תקנית בעמוד....

מה אפשר לעשות בקשר לזה? מישהו נתקל בזה בעבר?

* כמובן שיש גם meta שמגדיר utf-8 ב-header שכלול בכל העמודים...

Last edited by Jenya; 04-05-12 at 14:06..
  Reply With Quote
ישן 04-05-12, 15:06   # 2
Itay
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 564

Itay לא מחובר  

תריץ לפני כל השאילתות שלך את השאילתה הזאת:
קוד:
SET NAMES utf8;
המלצה שלי - פשוט תריץ אותה בקובץ שנמצא החיבור הכללי לדאטהבייס (בהנחה שיש אחד שאתה עושה לו אינקלוד) ישר אחרי הבחירה של הדאטהבייס
  Reply With Quote
ישן 04-05-12, 15:52   # 3
Jenya
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Mar 2012
הודעות: 133

Jenya לא מחובר  

ציטוט:
נכתב במקור על ידי Itay צפה בהודעה
תריץ לפני כל השאילתות שלך את השאילתה הזאת:
קוד:
SET NAMES utf8;
המלצה שלי - פשוט תריץ אותה בקובץ שנמצא החיבור הכללי לדאטהבייס (בהנחה שיש אחד שאתה עושה לו אינקלוד) ישר אחרי הבחירה של הדאטהבייס
הוספתי את זה מתחת ל mysql_connect וללא שינוי

ככה זה נראה בדיוק:
HTML קוד:
  if(!(@mysql_connect("$host","$user","$pass") && @mysql_select_db("$tablename"))) {
    mysql_query("SET CHARACTER SET 'utf8'");
  Reply With Quote
ישן 05-05-12, 10:56   # 4
NoBoDy
חבר בקהילה
 
NoBoDy's Avatar
 
מיני פרופיל
תאריך הצטרפות: Apr 2011
מיקום: נתניה
הודעות: 263

NoBoDy לא מחובר  

ציטוט:
נכתב במקור על ידי Jenya צפה בהודעה
הוספתי את זה מתחת ל mysql_connect וללא שינוי

ככה זה נראה בדיוק:
HTML קוד:
  if(!(@mysql_connect("$host","$user","$pass") && @mysql_select_db("$tablename"))) {
    mysql_query("SET CHARACTER SET 'utf8'");
הוא אמר לך לכתוב SET NAMES utf8 ולא SET CHARACTER SET 'utf8'.
אם אתה כותב את זה ועדיין לא עובד לך, תנסה למחוק את הטבלה ולהכניס לשם כמה פעמים, גם לי זה קורה ואחרי שאני מכניס כמה פעם תוכן, זה מסתדר.
  Reply With Quote
ישן 05-05-12, 12:07   # 5
Jenya
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Mar 2012
הודעות: 133

Jenya לא מחובר  

ציטוט:
נכתב במקור על ידי Nir berko צפה בהודעה
הוא אמר לך לכתוב SET NAMES utf8 ולא SET CHARACTER SET 'utf8'.
אם אתה כותב את זה ועדיין לא עובד לך, תנסה למחוק את הטבלה ולהכניס לשם כמה פעמים, גם לי זה קורה ואחרי שאני מכניס כמה פעם תוכן, זה מסתדר.
צודק, תיקנתי...

מחקתי את הטבלה והכנסתי כמה פעמים... לא עוזר :/ אני כבר משתגע
  Reply With Quote
ישן 05-05-12, 12:37   # 6
אדיר
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Mar 2008
מיקום: אשקלון
הודעות: 1,714

אדיר לא מחובר  

כדי שמסד הנתונים יעבוד באופן מלא תחת utf8_general_ci, להלן מס' דברים שיש לבצע ואפשר גם דרך ה- phpMyAdmin -
1. בלשונית של ה- host אתה מגדיר את ה- MySQL connection collation כ- utf8_general_ci.
2. בלשונית של ה- database הרלוונטי, אתה נכנס ל- Operations ומגדיר את ה- Collation כ- utf8_general_ci.
3. בלשונית של ה- table הרלוונטית, אתה נכנס ל- Operations ומגדיר את ה- Collation כ- utf8_general_ci.
4. בלשונית של ה- field הרלוונטי (אתה מגיע לשם דרך ה- Structure של הטבלה), אתה מגדיר את ה- Collation כ- utf8_general_ci.
5. בהתחברות למסד הנתונים, אתה שולח בתחילת החיבור את השאילתה SET NAME 'utf8'.

מבחינת מסד הנתונים, כל זה אמור להספיק.
מעבר לכך - יש לוודא כמובן שכל הקבצים מקודדים כ- utf8 ושאתה מגדיר לדפדפן שהקידוד הוא utf8 (ציינת שעשית את זה, אז זה אמור להיות בסדר).
  Reply With Quote
ישן 05-05-12, 19:37   # 7
Jenya
חבר בקהילה
 
מיני פרופיל
תאריך הצטרפות: Mar 2012
הודעות: 133

Jenya לא מחובר  

ציטוט:
נכתב במקור על ידי xPerfection צפה בהודעה
כדי שמסד הנתונים יעבוד באופן מלא תחת utf8_general_ci, להלן מס' דברים שיש לבצע ואפשר גם דרך ה- phpMyAdmin -
1. בלשונית של ה- host אתה מגדיר את ה- MySQL connection collation כ- utf8_general_ci.
2. בלשונית של ה- database הרלוונטי, אתה נכנס ל- Operations ומגדיר את ה- Collation כ- utf8_general_ci.
3. בלשונית של ה- table הרלוונטית, אתה נכנס ל- Operations ומגדיר את ה- Collation כ- utf8_general_ci.
4. בלשונית של ה- field הרלוונטי (אתה מגיע לשם דרך ה- Structure של הטבלה), אתה מגדיר את ה- Collation כ- utf8_general_ci.
5. בהתחברות למסד הנתונים, אתה שולח בתחילת החיבור את השאילתה SET NAME 'utf8'.

מבחינת מסד הנתונים, כל זה אמור להספיק.
מעבר לכך - יש לוודא כמובן שכל הקבצים מקודדים כ- utf8 ושאתה מגדיר לדפדפן שהקידוד הוא utf8 (ציינת שעשית את זה, אז זה אמור להיות בסדר).
עשיתי כל מה שרשמת לי, תודה.

לגבי סעיף 1, איך אני מגיע ללשונית host?

בדקתי, בכל מקום שאפשר להגדיר קידוד במסד מוגדר utf8_general_ci, הדפים מקודדים utf-8 without BOM ויש ב-header שורת meta שמגדירה לדפדפן על הקידוד.

בכל מקרה, כשאני מוסיף הוא מראה לי עדיין משהו בסגנון הזה:
קותי סבג
(זה מה שמופיע במסד, ומופיע באתר כ- ק×�ת×� ס×�×�)

לעומת זאת, כשאני עורך את אותה רשומה, מופיע לי משהו כזה:
לייק
(זה מה שמופיע במסד, באתר מופיע עברית תקנית)

אני ממש אובד עצות, אני לא יודע מה לעשות

תיקון:

עליתי על הבעיה, אחת הפונקציות השתמשה ב-htmlspecialchars, ומפה נבעה הבעיה. תיקנתי את זה ע"י:
htmlspecialchars($string, ENT_QUOTES, 'UTF-8')

תודה על העזרה!

Last edited by Jenya; 05-05-12 at 20:07..
  Reply With Quote
ישן 05-05-12, 20:09   # 8
אדיר
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Mar 2008
מיקום: אשקלון
הודעות: 1,714

אדיר לא מחובר  

ה- host זאת הלשונית הראשית.

בהמשך לבעיה -
נדמה שאתה לא מגדיר כמו שצריך את הקידוד של הדפים או לחילופין מבצע פעולה כלשהי על הטקסט שגורמת לכך.
האם אתה מכניס את הנתונים (או מעביר אותם) באמצעות AJAX? האם אתה מבצע include לדפים מסויימים שייתכן ואינם מקודדים כ- utf8?
יש הרבה דברים שיכולים לגרום לזה, קצת קשה לתת תשובה מדוייקת בצורה הזאת.

נסה ליצור דף חדש, להתחבר דרכו למסד הנתונים, להגדיר משתנה כלשהו ולהכניס את הערך שלו למסד.
האם הוא נכנס בצורה תקינה?
  Reply With Quote
ישן 05-05-12, 21:01   # 9
Itay
חבר מתקדם
 
מיני פרופיל
תאריך הצטרפות: Oct 2005
גיל: 34
הודעות: 564

Itay לא מחובר  

ציטוט:
נכתב במקור על ידי xPerfection צפה בהודעה
כדי שמסד הנתונים יעבוד באופן מלא תחת utf8_general_ci, להלן מס' דברים שיש לבצע ואפשר גם דרך ה- phpMyAdmin -
1. בלשונית של ה- host אתה מגדיר את ה- MySQL connection collation כ- utf8_general_ci.
2. בלשונית של ה- database הרלוונטי, אתה נכנס ל- Operations ומגדיר את ה- Collation כ- utf8_general_ci.
3. בלשונית של ה- table הרלוונטית, אתה נכנס ל- Operations ומגדיר את ה- Collation כ- utf8_general_ci.
4. בלשונית של ה- field הרלוונטי (אתה מגיע לשם דרך ה- Structure של הטבלה), אתה מגדיר את ה- Collation כ- utf8_general_ci.
5. בהתחברות למסד הנתונים, אתה שולח בתחילת החיבור את השאילתה SET NAME 'utf8'.

מבחינת מסד הנתונים, כל זה אמור להספיק.
מעבר לכך - יש לוודא כמובן שכל הקבצים מקודדים כ- utf8 ושאתה מגדיר לדפדפן שהקידוד הוא utf8 (ציינת שעשית את זה, אז זה אמור להיות בסדר).
רק שתכיר - ראיתי כבר כמה דאטהבייסים שהיו מוגדרים על latin, אבל השדות היו על utf8 general ci, וברגע שהיה את ה-set names הכל עבד כמו שצריך (מן הסתם אין סיבה להשאיר את זה על latin - אבל בכל זאת זה עובד)
  Reply With Quote
ישן 05-05-12, 21:34   # 10
אדיר
עסק רשום [?]
 
מיני פרופיל
תאריך הצטרפות: Mar 2008
מיקום: אשקלון
הודעות: 1,714

אדיר לא מחובר  

ציטוט:
נכתב במקור על ידי Itay צפה בהודעה
רק שתכיר - ראיתי כבר כמה דאטהבייסים שהיו מוגדרים על latin, אבל השדות היו על utf8 general ci, וברגע שהיה את ה-set names הכל עבד כמו שצריך (מן הסתם אין סיבה להשאיר את זה על latin - אבל בכל זאת זה עובד)
אני לא מבין את הפואנטה כאן..

אם אתה יודע שזאת טעות, למה להשאיר את זה ולא לסדר את זה? תגדיר את זה כמו שצריך מההתחלה ולא תיתקל בבעיות כאלו.
חכמים ממני אמרו: "פיקח הוא מי שנחלץ מצרה שחכם נמנע ממנה מלכתחילה", יש היגיון בדבר.

Last edited by אדיר; 05-05-12 at 21:36..
  Reply With Quote
השב

חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים)
 


חוקי פירסום
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is מופעל
סמיילים הם מופעל
[IMG] קוד מופעל
קוד HTML מכובה

קפיצה לפורום


כל הזמנים הם GMT +2. הזמן כעת הוא 16:13.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ