سؤال

أنا مرتبك حقًا هنا ، هل يمكن لأحد أن يشرح هذا لي؟

طلب:http://example.com/test.php?var=String's

$a = $_GET["var"];
$b = "String's";

echo $a . "<br/>";
echo $b . "<br/>";

$output = mysql_real_escape_string($a);
$output = mysql_real_escape_string($b);
echo "<hr/>";
echo $a . "<br/>";
echo $b . "<br/>";

نتيجة:

String\'s
String's
----------------
String\'s
String's

هل يمكن لشخص ما أن يشرح لي ليس فقط لماذا يتم تحويل متغيرتي على هذا النحو ، ولكن كيف يمكنني إزالة هذا السلوك بحيث يتم إرسال مدخلاتي تمامًا عند إرسالها؟ أواجه مشكلة حيث يمرر غلاف SQL الخاص بي هذا من خلال mysql_real_escape_string () وينتهي به الأمر String\\\'s :(

هل كانت مفيدة؟

المحلول

نصائح أخرى

تستطيع وينبغي تعطيل الاقتباسات السحرية.


الوضع المفضل
أخرجهم في php.ini


.htaccess وضع
أضف هذا إلى ملف htaccess الخاص بك

php_flag magic_quotes_gpc off


وضع وقت التشغيل PHP5

<?php
if (get_magic_quotes_gpc()) {
    function stripslashes_gpc(&$value)
    {
        $value = stripslashes($value);
    }
    array_walk_recursive($_GET, 'stripslashes_gpc');
    array_walk_recursive($_POST, 'stripslashes_gpc');
    array_walk_recursive($_COOKIE, 'stripslashes_gpc');
    array_walk_recursive($_REQUEST, 'stripslashes_gpc');
}
?>


وضع وقت التشغيل PHP4

<?php
if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
?>


أهلا بك في magic_quotes نادي Hater's! قون

ربما يكون لديك اقتباسات سحرية تم تشغيلها. هذا يهرب تلقائيا الحصول على بيانات ، نشر وملف تعريف الارتباط. اقتباسات السحرية سيئة ولا ينبغي الاعتماد عليها للهروب من البيانات بشكل صحيح.

إذا كان لديك وصول إلى php.ini ، يمكنك اقتبس أسعار السحر.

إذا لم تقم بذلك ، يمكنك الجري شرائح الشرق على البيانات لإزالة القطع. لجعل الكود المحمول الخاص بك ، يجب عليك أولاً التحقق get_magic_quotes_gpc() لمعرفة ما إذا كان قد تم تشغيله وعندما تشغيل stripslashes فقط. وبهذه الطريقة ، إذا قمت بنقل التعليمات البرمجية الخاصة بك إلى خادم يحتوي على أسعار سحرية ، فسيظل الرمز الخاص بك يعمل.

if(get_magic_quotes_gpc()) {
    $a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top