Ուրեմն այսպես. նախ ասեմ, որ եթե post կամ get - ից հետո, մեխանիկորեն բոլոր ", ' նշաններից առաջ հայտնվում է \ նշանը, ապա Magic Quotes արժեքը php.ini - ում դրված է on.
; Magic quotes
;
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
PHP սկրիպտում ունենք հնարավուրություն այն ստուգելու.
<?
// checkign is magic quotes on or off:
if(get_magic_quotes_gpc()) {
echo "Magic quotes are enabled";
} else {
echo "Magic quotes are disabled";
}
// kan eli function-ner, manramasn chem meknabanum.
?>
եթե Magic quotes - ի արժեքը off է, ապա այդ աշխատանքը կարող եք կատարել addslashes() ֆունկցիայով.
Օրինակ .
<?
$lala - addslashes($_POST['textfield']);
//$lala - stripcslashes($_POST['textfield']);
?>
Ամենահարմար մեթոդը, որը այսոր եմ ՛փորփրել՛, հետեւյալն է.
<?
// Getting posted vars.
$lala = $_POST['textfield'];
echo "after post <br>".$lala."<br>";
$lala = stripcslashes($lala);
echo "after stripcslashes()<br>".$lala."<br>";
$for_html_lala = for_html($lala);
echo "after for_html() <br>".$for_html_lala;
function for_html($var) {
$var=str_replace("'", ''', $var);
$var=str_replace('"', '"', $var);
return $var;
}
?>
<form id="form1" name="form1" method="post" action="">
<input name="textfield" type="text" id="textfield" value="<? echo $for_html_lala; ?>" />
<input type="submit" name="button" id="button" value="Submit" />
</form>
---------------------------------------------------------------------------------------------
ինչ՞ է կատարվում.
1) $lala = stripcslashes($lala); հանում է սլեշերը. ասենք եթե ունենք - Hello "My" name's \Lavrent\.
ապա post - ից հետո կստանանք - Hello \"My\" name\'s \\Lavrent\\.
$lala = stripcslashes($lala) - ից հետո էլ կստանանք - Hello "My" name's \Lavrent\.
բայս եթե textfield - ի մեջ կարիք կա նորից echo անելու $lala փոփոխականը, ապա ունենում ենք րել պրոբլեմ.
Պրոբլեմը հետեւյալն է՝ եթե տողում ունենք " նշանը, ապա textfield - ի value="<? echo $lala; ?>" - ի
ժամանակ textfield - ը փչանեւմ է.
2) Հետեւաբար կստեղծենք ֆուկցիյա for_html(), որը մեզ կոգնի.
Մանրամասն - տես PHP կոդում.