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

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

CodeX 21-10-08 21:30

[בעיה] str_replace עקשן =\
 
שמעו הקוד שלי הוא כזה:
PHP קוד:

$msg htmlspecialchars($row2['msg']);
$msg substr($msg,$start,$length); 

$msg str_replace("<Br />","",$msg);
$msg str_replace("<b>","",$msg);
$msg str_replace("</b>","",$msg); 

בקיצור $msg שלוף הודעה מהמסד.
עכשיו במסד זה שמור עם תגי HTML כמו BR וB וכאלה,
אך שאני מציג את זה בתצוגה מסוימת ביטלתי אותם דרך htmlspecialchars, ואז זה משאיר לי את זה ככה:
ציטוט:

<b>[מדריך] הורדה מבלה בלה</b> <Br /> <Br />רשית כנסו לאתר: <Br />שדגשדגשדג <Br /> <Br /> <Br />עכשיו...
הגדרתי את str_replace והוא לא מחליף אותם לכלום!
ניסיתי גם עם preg_replace ...

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

HOLD 21-10-08 22:13

נסה רק חלק מהתווים , כך תוכל לאתר את השגיאה..

קוד:

$msg = str_replace("<","",$msg);
וככה את כולם..

Elad-A 21-10-08 22:22

אם תסתכל בקוד מקור של הדף אתה תשים לב שאין לך באמת < או > בקוד אלא את הקוד ההפוך שלהם (שהפונקצייה htmlspecialchars יוצרת)

CodeX 21-10-08 22:28

אחרי שהוספתי את השורות:
PHP קוד:

$msg preg_replace("<Br />","",$msg);
$msg preg_replace("<b>","",$msg);
$msg preg_replace("<i>","",$msg); 

קיבלתי:
ציטוט:

<>שד</> <><>שגשדג</>...
במקום:
ציטוט:

<b>שד</b> <Br /><i>שגשדג</i>...
PREG יותר יעיל אבל בכל זאת זה לא מוריד את ה < > /

omercnet 21-10-08 22:45

תעיף את htmlspecialchars, כי הוא לא מוציא כלום, אלא רק ממיר < ל &lt; וכיו"ב, כדי שזה יהיה בטוח, אבל הוא לא מסיר כלום.

ע"מ להסיר טגים, יש פונקציה מאד יפה בשם strip_tags

בהצלחה


נ.ב,
למתעקשים שבניכם, REGEXP נכון למקרה הזה הוא
קוד:

<[a-zA-Z\/][^>]*>

CodeX 21-10-08 22:46

תודה רבה עזרת לי מאוד!

AlmogBaku 22-10-08 01:25

טעות נפוצה:

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

PHP קוד:

$msg=str_ireplace("<br/>"""$msg);
$msg=htmlspecialchars($msg); 


אגב, אולי אתה צריך את זה.. בשביל לבטל את כל הטאגים: striptags() ...


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

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