בקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!
-
-
@שמואל-ש
ויזואל סטודיו קוד מאוד מאוד מומלץ לכתיבת קודהאם הפונקציה mb_substr לא עזרה לך?
-
@לעזור-לכולם כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
@שמואל-ש
תוריד את הקובץ למחשב, ותעשה שמירה בשם, ובחר בUTF-8אבל אני גם עושה ניסויים פה
@שמואל-ש כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
וכן ניסיתי גם פה (ע"י שמחקתי את הקוד שהיה וכתבתי לבד את הנ"ל)
ולא נראה לי ששם יש גם בעיה הנ"ל.
ולא כ"כ נראה לי שכל פעם צריך לעשות כך... -
@לעזור-לכולם כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
האם הפונקציה mb_substr לא עזרה לך?
אני אמור לעשות כך
$asd=mb_substr($rts,0,1,"UTF-8");
?
לא חוזר לי כלום! -
-
@לעזור-לכולם כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
@שמואל-ש כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
$rts
???
המשתנה ששם הטקסט שאני רוצה לחתוך ממנו תו אחד
@לעזור-לכולם כתב בבקבלת תו ממחרוזת ב-PHP התו חוזר בג'יבריש!:
[זה לא אמור להיות $str?]
מה? קודם סימן המשתנה ואח"כ שם המשתנה, לא?
-
@לעזור-לכולם לא קשור
-
@שמואל-ש כתב בבקבלת תו ממחרוזת ב-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 -