سؤال

أقوم بإنشاء بعض 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>';

يرى: http://php.net/manual/en/function.addslashes.php

نصائح أخرى

يمكنني استخدام json_encode ().

http://ie2.php.net/manual/en/function.json-encode.php

يجب أن تكون هذه خطوة في الاتجاه الصحيح:

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top