PHP yapışkan bir form için bir değer çift tırnak Kaçmak

3 Cevap php

Beladan değer çift tırnak varsa form gönderildiğinde o girilir ne hatırlar yapışkan bir form yapma biraz yaşıyorum. Sorun HTML gibi bir şey okumak gerekiyordu olmasıdır:

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

Ancak, eğer ifade: "Bunu nasıl yapacağım?" tırnak ile yazılırsa, elde edilen HTML benzer:

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

Nasıl çift tırnak filtre olurdu? Ben stripslashes ve addslashes kullandım, açık ve kapalı sihirli tırnak ile denedim, ama şimdiye kadar doğru çözümü rastlamak değil. PHP için bu sorunu aşmanın en iyi yolu nedir?

3 Cevap

İstediğiniz htmlentities().

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

Yukarıdaki html birimi kodu sahip karakterlerden her türlü kodlar. Ben kullanmayı tercih:

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

Bu yalnızca kodlar:

'&' (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;'

Ayrıca html ve php etiketlerini kaldırmak için $ MyValue bir sayisinda strip_tags yapabilirdi.

This is what I use:

htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, 'UTF-8')
  • ENT_QUOTES Ben arzu bulmak hem tek hem de çift tırnak, dönüştürmek için PHP söyler.
  • ENT_SUBSTITUTE ve geçersiz Unicode ile ENT_DISALLOWED anlaşma. Onlar oldukça benzer konum - olarak anladığım kadarıyla, ilk yerine geçersiz kod birimi dizileri, yani invalidly encoded characters or sequences that do not represent characters, ise verilen belge türü için ikinci yerine geçersiz kod noktaları, yani characters which are not allowed for the document type specified (veya varsayılan açıkça belirtilmiş olması durumunda). documentation onlara istenmeyecek özlü olduğunu.
  • ENT_HTML5 kullandığım belge türüdür. Farklı bir birini kullanabilirsiniz, ancak bu sayfa doküman türü aynı olmalıdır.
  • UTF-8 belgemin kodlama. İngilizce olmayan metin ile ilgili olacak, özellikle eğer - Ben size PHP 5.4.0 kullanıyorsanız kesinlikle emin olmadıkça, size açıkça kodlaması belirtmek, öneririz. Ben anlamsız üretir ISO-8859-1 varsayılan ve kullanımları 5.2.something, bazı işler yapmak bir konak.

thesmart anlaşılacağı gibi htmlentities bir HTML temsilini her şeyi dönüştürür ise, htmlspecialchars sadece ayrılmış HTML karakterleri kodlar. En bağlamlarda iş yapacak ya. Here konuyla ilgili bir tartışma.

Bir şey daha var: onlar yanlış bir güvenlik duygusu vermek ve 5.3.0 ve 5.4.0 önerilmemektedir kaldırılır pasifleştirilmeli sihirli tırnak tutmak için en iyi uygulamadır. Bu etkinse, sizin alanlarında her alıntı postback üzerinde bir ters eğik çizgi başına eklenecektir (ve birden geri göndermeler daha eğik katacak). Ben OP ayarını değiştirmek mümkün olduğunu görmek, ama gelecek referanslar için: Eğer paylaşılan bir bilgisayar üzerinde veya başka php.ini erişiminiz yoksa, kolay yolu eklemek için

php_flag magic_quotes_gpc Off

.htaccess dosyasına.