הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   החלפת מילה בקישור (https://hosts.co.il/forums/showthread.php?t=93332)

Tomer 09-11-11 20:39

החלפת מילה בקישור
 
היי,

הכותרת נשמעת פשוטה- ואכן זו לא בעיה בכלל להחליף מילה במילה אחרת (או בקישור, לצורך העניין). אני צריך משהו קצת אחר ואני לא ממש מוצא פתרון.

אני צריך להחליף מילה (נניח, "יוסי") בקישור (נניח, http://www.yossi.com) - אבל כל עוד המילה היא בפני עצמה ולא חלק מקישור אחר.

נניח במשפט "ליוסי היו ידיים גדולות" - המילה יוסי תוחלף בקישור. במידה והמשפט הוא "ל<a href=......>יוסי</a> היו ידיים גדולות" - המילה יוסי לא תוחלף והקישור יישאר שלם.

למישהו יש רעיון? ניסיתי עם preg_replace ולא הצלחתי כ"כ.


תודה!

daNN 09-11-11 21:16

לא לזה משמשים regular expression's הם משמשים לדברים הרבה יותר מורכבים מאשר החלפת מילה..
אתה יכול להשתמש בפונקציה str_replace
קוד:

<?php
$str = "yossi dan daniel";
$str = str_replace("yossi", "<a href=\"http://yossi.co.il\">yossi</a>", $str);
?>


Tomer 09-11-11 21:41

תקרא שוב בבקשה את השאלה... str_replace היא לא הפונקציה הנכונה כאן.

daNN 09-11-11 21:47

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

אני הייתי פותר את הבעיה בעזרת 3 החלפות וזאת הדרך הפשוטה ביותר לעשות את זה.
תחליף את כל המילות יוסי בתור הקישורים באופן זמני ל#יו-סי# (נניח..) - זה הביטוי הרגולרי היחיד שאתה צריך ליישם
עכשיו תבצע את ההחלפה שלך - אפשר בעזרת str-replace
תחליף בחזרה את הביטוי הזמני ל"יוסי". - אפשר גם בעזרת str-replace

Tomer 09-11-11 21:57

היי

איך הפתרון אמור למנוע החלפת המילה לקישור במקרה והיא נמצאת בתוך קישור אחר?

daNN 09-11-11 22:01

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

Tomer 09-11-11 22:10

הבנתי את הרעיון, את היישום לצערי לא הצלחתי.

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

Tomer 09-11-11 22:19

done, הצלחתי.

תודה!

IgalSt 10-11-11 00:11

תומר, אשמח אם תוכל לשתף את כולם בפתרון שלך.

בחשיבה זריזה, אני לא מצליח למצא פתרון אחר חוץ מלפרסס (parse) את כל ה-xml/xhtml שלך

Tomer 10-11-11 01:47

יגאל, הפתרון הוא מה ש daNN רשם - בהחלט הדרך הכי נכונה לדעתי לעשות את זה. ב regular expression אחד זה בלתי אפשרי (וניסיתי לחפור את כל האינטרנט בשביל זה).

הרעיון הוא להחליף את כל המופעים שנמצאים בין <a></a> של המילה הרצויה במילה זמנית - לדוגמה CHG_THIS
אח"כ להחליף את כל המופעים של המילה הרצויה בקישור (str_replace / preg_replace פשוט)
בסוף להחזיר את CHG_THIS בחזרה למילה הרגילה - גם preg_replace / str_replace פשוט

קוד של +- 4 שורות.

IgalSt 10-11-11 08:56

כן, נשמע באמת יותר יעיל מאשר לפרסס את כל ה-xml שלך.
מצד שני, יש את הסיכוי הקטן מאוד שה-CHG_THIS יופיע בסטרינג ונשבור את כל הלוגיקה.

בכל אופן, גם אני הייתי בוחר כנראה בצדרך של daNN כפתרון בשקלול עלות-תועלת.

תודה על השיתוף

Tomer 10-11-11 20:46

אני בספק אם בפורום תוכים ירשמו CHG_THIS ;)

בכ"מ המילה הזמנית יותר ארוכה ופחות סבירה מ CHG_THIS

IgalSt 11-11-11 14:55

ציטוט:

נכתב במקור על ידי Tomer (פרסם 824615)
אני בספק אם בפורום תוכים ירשמו CHG_THIS ;)

בכ"מ המילה הזמנית יותר ארוכה ופחות סבירה מ CHG_THIS

{[CHG_THIS]}

?? :)

ומתכנת טוב צופה את כל השגעונות של המשתמשים שלו. ובכל מקרה אחרי זה יש הרבה דברים שהוא לא צפה :-)

Tomer 11-11-11 15:41

מילה בסגנון של "BLA_BLO_BLE_BLR_תוכים" זו לא מילה שגולש יכול לעלות עליה, בטח ובטח שלא בפורום תוכים ;)

daNN 11-11-11 16:20

יגאל, אני אוהב את התגובות המתנשאות שלך חבל שאתה אף פעם לא מצרף איזה פתרון משלך להוכיח שאתה כלכך "גורו".


שבת שלום :)

IgalSt 11-11-11 16:33

ציטוט:

נכתב במקור על ידי daNN (פרסם 824674)
Tomer,
פתרון חכם יהיה "הזרקה" של תג HTML כלשהוא
מאחר שמן הסתם לא תיתן למשתמשים שלך להזריק HTML (htmlentites/htmlspeicalchars)
וככה תידע בדיוק מה המילה ששינית ולא תטעה בטעות ותשנה מילה של משתמש. :)

רעיון יפה.
אני בד"כ מכניס איזושהי מחרוזת שמורכבת מתווי אסקי באחד הקיצונים (char 1,2 או 255, 254) כשאני צריך להכניס דגל כלשהו לסטרינג.


ציטוט:

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

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

אם אתה מעוניין, אשמח להמשיך את הדיון הזה בפרטי.

Tomer 11-11-11 16:34

תודה על העזרה כולם, אתם לאט לאט מתדרדרים.


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

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