אם אתה עובד עם PHP ואתה רוצה להציג רק קטע מטקסט המקור שלך ולחתוך אותו במספר תווים, הקטע שלך יכול להראות מכוער אם הוא נעשה באמצע המחרוזת. הייתי צריך לכתוב פונקציה כדי לעשות זאת ב- ASP וב- ASP.NET שבעצם חזרו מהדמות האחרונה כדי למצוא את החלל האחרון ונתק אותו שם. סוג של מגעיל ומעט יתר על המידה. אתה באמת יכול לראות את זה בפעולה בביתי עמוד שם אני מספק רק את 500 התווים הראשונים.
הייתי מוכן לחלוטין לפתח את אותה פונקציה עם PHP היום אבל מצאתי (כרגיל) של- PHP יש פונקציה שעושה את זה כבר, strrpos.
הקוד הישן ייקח תשתית ($ content) מהתו הראשון למספר התווים המרבי שאתה רוצה ($ maxchars):
$ content = substr ($ content, 0, $ maxchars); הד $ תוכן;
הקוד החדש:
$ content = substr ($ content, 0, $ maxchars); $ pos = strrpos ($ content, ""); אם ($ pos> 0) {$ content = substr ($ content, 0, $ pos); } הד $ תוכן;
אז הקוד החדש מנתק את התוכן במגבלת התווים שאתה מחפש. עם זאת, השלב הבא הוא לחפש את המרחב האחרון ("") בתוכן. pos $ יהיה בסופו של דבר להיות תפקיד זה. עכשיו, אני פשוט מוודא שיש באמת מקום בתוכן על ידי שאלתי אם $ pos> 0. אם לא, זה פשוט יחתוך את התוכן במספר התווים שביקשתי. אם יש מקום כלשהו, זה יחתוך בחן את התוכן שלי בחלל.
זוהי דרך נחמדה להשתמש בשילוב של מספר התווים המקסימלי וניתוק המילה. מקווה שאתה אוהב!
ואני בטוח שאגלה אם יש פונקציית ASP.NET שעושה את זה ... לא הצלחתי למצוא.
דאג, ב-C# אתה יכול להשתמש בשיטת String.LastIndexOf כדי לעשות מה שstrrpos עושה ב-PHP.
ידעתי שזה יקרה! 🙂
תודה, Abhijit!
מְעוּלֶה! בדיוק מה שחיפשתי. תודה.
אם $content בהתחלה קצר יותר מ-$maxchars, הקוד כפי שנכתב עדיין ייראה מימין לשמאל עבור רווח ויגזור את המילה האחרונה. אתה יכול לשרשר רווח בסוף $content, או לעשות אם (strlen()...)
נראה שזה עבד כפונקציה (מתייחס להערה הקודמת):
function showexcerpt($content, $maxchars) {
if (strlen($content) > $maxchars) {
$content= substr($content, 0, $maxchars);
$pos = strrpos($content, " ");
if ($pos>0) {
$content = substr($content, 0, $pos);
}
החזר תוכן $. "...";
אחר} {
חזור תוכן $;
}
}
מה אם הדמות האחרונה שלנו היא תו פיסוק כמו נקודה, סימן קריאה או סימן שאלה? למרבה הצער, קוד זה ימחק את כל המילה שלפני תו הפיסוק האמור.
אני חושב שעדיף שתכתוב משהו קצת יותר חזק.
רעיון כל כך טוב!