علامات javaScript و QUOTE التي تم إنشاؤها
-
21-09-2019 - |
سؤال
أقوم بإنشاء بعض JavaScript في رمز PHP الخاص بي ، وأحتاج إلى تعيين بعض متغيرات PHP لمتغيرات JavaScript. لسوء الحظ ، في بعض الأحيان تحتوي متغيرات PHP على علامات اقتباس. على سبيل المثال:
$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = '{$foo}';</script>";
سيقوم بإنشاء خطأ JavaScript لأن JavaScript الناتج سيبدو هكذا:
<script type='text/javascript'>var foo = '"'Dis here be a \"string\"';
أعلم أنه يمكنني استخدام regexp على $ foo لاستبدال الجميع '
علامات مع \'
ولكن هذا صعب لأسباب مختلفة. هل هناك أي شيء يمكنني فعله أقل من ذلك؟ شيء أقرب إلى بيرل q()
وظيفة...
المحلول
حاولت القيام بذلك؟
$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';
نصائح أخرى
يمكنني استخدام json_encode ().
يجب أن تكون هذه خطوة في الاتجاه الصحيح:
addcslashes($str, "\"\r\n\\\t/\0..\37");
هل أنت واثق؟ أليس كذلك:
var foo = ''Dis here be a "string"'
من أجل منع المحاولة المزدوجة:
$foo = "\'Dis here be a \"string\"";
أو
$foo = '\\\'Dis here be a "string"';
تجدر الإشارة أيضًا إلى أنه يمكنك استخدام ملف PHP كملف JavaScript
<script type="text/javascript" src="js/main.php"></script>
وأنت قادر على تنفيذ رمز PHP في هذا الملف ، وكذلك إخراج رمز JavaScript عن طريق الصدى من PHP.
نظرًا لأنك تستخدم القيمة النهائية في JavaScript ، أود أن أستخدمها json_encode
:
$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = " . json_encode($foo) . ";</script>";
وسوف يخرج بشكل صحيح:
<script type='text/javascript'>var foo = "'Dis here be a \"string\"";</script>
لاحظ أنني لم أضع مجموعة إضافية من الاقتباسات حول json_encode
وظيفة. سيضيف عروض الأسعار اللازمة لجعلها سلسلة JavaScript صالحة تلقائيًا.
إجابة فرانك فارمر مثيرة للاهتمام ، لكنها تفلت من بعض الأشياء التي لا تحتاج إلى الهروب ، مثل علامات التبويب.
جرب هذا المقتطف ، إنه يعمل بشكل جيد:
<script type="text/javascript">
alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
</script>
نظرًا لأنني متصل دائمًا بقاعدة بيانات في البرامج النصية PHP الخاصة بي التي تمرر النص مباشرة إلى سلاسل JavaScript ، فإنني أميل إلى real_escape_string للقيام بعملي القذر. لا تتعامل AddSlashes ()
بسيط $sql->real_escape_string($string)
يجعل الأمر أفضل ، يهرب من كل ما تبثه قاعدة البيانات في شكل صديق JavaScript.