בקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!
-
@לעזור-לכולם כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
אם לא אכפת לך, אתה יכול להעלות את הקוד שכתבת?
@שמואל-ש כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
@dovid מה זאת אומרת? באיזה פקודה? אז בפקודה פשוטה כגון
<?php $str="אבגדה"; echo $str[2]; ?>
-
תבדוק אם זה עובד לך
<?php $str="אבגדה"; echo mb_substr($srt,0,1); ?>
-
@לעזור-לכולם לא, הוא לא מדפיס כלום!
-
@לעזור-לכולם לא השתנה שום דבר
-
@dovid @לעזור-לכולם עכשיו אני רואה שב
mb_substr
שהציע @לעזור-לכולם הוא לא כותב כלום, אבל בפשוטsubstr
הבעיה היא רק אם אני כותב בנוסף למספר שממנו יתחיל, גם מספר התווים שיקח, במקרה הזה שבאנגלית הוא עובד חלק, בעברית הוא מתחיל לקשקש...
מה עושים? -
@שמואל-ש כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
@לעזור-לכולם כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
[VSC או על השרת]
בשרת
מה זה VSC?
-
@שמואל-ש
איך שאני מבין יש שתי אפשרויות מה גורם לבעיה,
אם קוד המקור שלך מקודד בקידוד יוניקוד אז הגורם לבעיה היא ככה:
קוד PHP רגיל מתייחס למחרוזת עם ההנחה השגויה שכל תו הוא באורך של בייט אחד, הנחה זו שגויה לגבי טקסט עברי בייצוג יוניקוד כמו קידוד UTF-8 וכדומה, לכן קוד רגיל של PHP נותן תוצאה לא נכונה, הוא מוציא את הבייט השני שזה לא התו השני
אם זו הבעיה אז הפתרון של @לעזור-לכולם היא הנכונה,
הדגמה:
https://onlinephp.io/c/6258c
השימוש בפוקנציית mb_substr יודעת לפצל את הטקסט לתווים גם כאשר תו יחיד הוא יותר מבייט אחדאם קוד המקור שלך מקודד בצורה שכל תו הוא בייט אחד למשל ANSI, אז קוד בסיסי של PHP אמור לעבוד אבל יכול להיות שזה לא מוצג נכון בפלט כי מי שמציג את זה לא יודע להציג את הטקסט בקידוד ANSI
ואם ככה אז צריך להשתמש גם בפתרון של @Shmuel754 לשמור בקידוד יוניקוד UTF8 או לחילופין לגרום שמי שמציג את הפלט יבין שמדובר בקידוד ANSI -