
08-10-2009, 15:17
|
|
|
|
חבר מתאריך: 15.08.06
הודעות: 1,561
|
|
|
כמה תיקונים והסברים
אם גרסת ה PHP שלך היא פחות מ 5.2.0, אז אין לך את json_encode ו json_decode. אתה יכול להתקין ספריה חיצונית (או PECL) בשביל להשתמש בזה.
הנה קוד ששיפרתי קצת:
קוד PHP:
<?php
$gvalues = array( 'a' => 1, 'b' => 2, 'zz' => array( 1 => 100, 2 => 200, ), );
$gvalues_serialize = htmlspecialchars(serialize($gvalues));
?> <html> <body> <?php if (!empty($_POST)) { $post_gvalues = $_POST['gvalues']; if (get_magic_quotes_gpc()) { $post_gvalues = stripslashes($post_gvalues); } $new_gvalues = unserialize($post_gvalues); var_dump($new_gvalues); } ?> <form action="<?=$_SERVER['PHP_SELF'];?>" method="post"> <input type="hidden" name="gvalues" value="<?=$gvalues_serialize;?>" /> <input type="submit" /> </form> </body> </html>
הסברים:
אחרי ה serialize() הערך שרציתי לשים היה מלא במרכאות. כיוון שאני שם את זה בתוך מאפיין של אלמנט input, אז הערך יימצא בתוך מרכאות כפולות, ולכן אני לא יכול להשתמש בפנים במרכאות כפולות, אז השתמשתי בפונקציה htmlspecialchars שמקודדת את המרכאות ועוד אותיות בעייתיות.
בבדיקה של "האם נשלח", אני מוצא את הערך ואחרכך בודק אם get_magic_quotes_gpc(). זאת פונקציה שבודקת אם השרת משתמש בmagic_quotes_gpc שזה אומר שכל ערך שאתה מעביר ב POST, הוא מוסיף לו סלאשים לפני מרכאות. אם הוא עושה את זה, זה יכול להרוס את כל הסיריאליזציה של האובייקט שהעברנו. אז במקרה שהשרת כן משתמש בזה, אני מעביר את הערך דרך פונקצית stripslashes.
_____________________________________
!!אזהרה!!
ההודעה עלולה להכיל שברי אגוזים ו/או איברי דגים כלשהם
!!אזהרה!!
|