الهروب من علامات الاقتباس المزدوجة في قيمة لزجة شكل في PHP

StackOverflow https://stackoverflow.com/questions/273969

سؤال

انا اعاني من مشكلة في جعل لزجة النموذج الذي سوف تذكر ما دخلت في ذلك على تقديم النموذج إذا كانت قيمة له علامات الاقتباس المزدوجة.المشكلة هي أن HTML المفترض أن قراءة شيء من هذا القبيل:

<input type="text" name="something" value="Whatever value you entered" />

ومع ذلك ، إذا كانت العبارة:"كيف أفعل هذا ؟" يتم كتابتها مع اقتباسات, مما أدى HTML مماثلة:

<input type="text" this?="" do="" i="" how="" value="" name="something"/>

كيف يجب أن تصفية مزدوجة الاقتباس ؟ لقد حاولت ذلك مع اقتباسات ماجيك وخارجها ، لقد استعملت stripslashes و addslashes, ولكن حتى الآن أنا لم تأتي عبر الحل الصحيح.ما هي أفضل طريقة للتغلب على هذه المشكلة من أجل PHP?

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

المحلول

htmlentities () .

و<input type="text" value="<?php echo htmlentities($myValue); ?>">

نصائح أخرى

ما سبق وترميز جميع أنواع الشخصيات التي لديها كود كيان أتش تي أم أل. انا افضل استخدام:

htmlspecialchars($myValue, ENT_QUOTES, 'utf-8');

وهذا لن يؤدي إلا ترميز:

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'

ويمكنك أيضا القيام strip_tags على $ myValue لإزالة علامات HTML و PHP.

هذا هو ما يمكنني استخدام:

htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, 'UTF-8')
  • ENT_QUOTES يقول PHP لتحويل كل واحد الاقتباس المزدوجة ، التي أجد المرغوب فيه.
  • ENT_SUBSTITUTE و ENT_DISALLOWED التعامل مع غير صالحة Unicode.إنهم مماثلة تماما - بقدر ما أفهم أول بدائل صالحة رمز وحدة متواليات ، أي invalidly ترميز الأحرف أو متواليات لا تمثل الشخصيات, بينما الثانية بدائل صالحة نقاط الرمز من أجل إعطاء نوع المستند ، أي الشخصيات التي لا يسمح لنوع المستند المحدد (أو الافتراضي إذا لم يكن محددا بشكل واضح).على الوثائق هو غير مرغوب فيه الاقتضاب عليها.
  • ENT_HTML5 هو نوع المستند يمكنني استخدام.يمكنك استخدام واحدة مختلفة ، ولكن يجب أن تتناسب مع الصفحة الخاصة بك doctype.
  • UTF-8 هو ترميز المستند.أقترح أن إلا إذا كنت متأكدا تماما من أنك تستخدم PHP 5.4.0, صراحة تحديد ترميز - خاصة إذا كنت سوف يكون التعامل مع غير الإنجليزية النص.مجموعة فعلت بعض العمل على الاستخدامات 5.2.شيء الذي تخلف عن ISO-8859-1 وتنتج رطانة.

كما thesmart يوحي ، htmlspecialchars بترميز محفوظة فقط HTML الشخصيات حين htmlentities يحول كل ما له HTML التمثيل.في معظم السياقات إما سيتم القيام بهذه المهمة. هنا مناقشة حول هذا الموضوع.

أكثر شيء واحد:وهو أفضل الممارسات للحفاظ ونقلت السحر تعطيل لأنها تعطي شعور زائف بالأمان و هي إهمال في 5.3.0 و إزالتها من 5.4.0.إذا تم تمكين كل اقتباس في الحقول سيتم إرفاق مسبقا من قبل مائل على إعادة النشر (و متعددة postbacks سيتم إضافة المزيد والمزيد من خطوط مائلة).أرى أن المرجع هو قادرة على تغيير الإعداد ، ولكن للحصول على مراجع في المستقبل:إذا كنت مشترك المضيف أو لم يكن لديك الوصول إلى php.ini, أسهل طريقة لإضافة

php_flag magic_quotes_gpc Off

إلى .htaccess الملف.

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