htmlspecialchars'dan ile ilgili sorunlar

3 Cevap php

Ben şu php kod bağlantıları üreten duyuyorum. Bağlantıları tarayıcıda görünür ve oluşturulan html kodunu ancak linklere tıklayabilirsiniz-mümkün değil, gayet iyi görünüyor. IE ve FF bu test, ve boşuna Kundakçı ile görmek için denedim.

Benim formunu oluşturmak için kod

$uploadhtml = htmlspecialchars(json_encode("<form action='up.php' method='post'
enctype='multipart/form-data'>
<label for='file'>Filename:</label>
<input type='file' name='file' id='file'/> 
<br />
<input type='hidden' name='pk' value='".$pk."'>
<input type='hidden' name='username' value='".$USERNAME."'>
<input type='submit' name='submit' value='Submit' onclick=\"setTimeout(function() { 
updateByPk('Layer2', '".$pk."', '".$brand."', '".$pg."'); } ),1250);\" />
</form>"), ENT_QUOTES);

Oluşan html kodu:

    <a onclick="makewindows(&#39;&quot;<form action=&#39;up.php&#39; method=&#39;
post&#39;\r\nenctype=&#39;multipart\/form-data&#39;>\r\n<label for=&#39;
`file&#39;>Filename:<\/label>\r\n<input type=&#39;file&#39; name=&#39;file&#39; id=&#39;`file&#39;\/> \r\n<br \/>\r\n<input type=&#39;hidden&#39; name=&#39;pk&#39; value=&#39;
380118179930&#39;>\r\n<input type=&#39;hidden&#39; name=&#39;username&#39; value=&#39;
janmaybach&#39;>\r\n<input type=&#39;submit&#39; name=&#39;submit&#39; value=&#39;
Submit&#39; onclick=\&quot;setTimeout(function() { updateByPk(&#39;Layer2&#39;, 
&#39;380118179930&#39;, &#39;Ed Hardy&#39;, &#39;1&#39;); } ),1250);\&quot; 
\/>\r\n<\/form>&quot;&#39;); return false;" href="#">Upload files</a>

Ben bir JavaScript hatası var sanırım, ama bunu saptamak için nasıl bilmiyorum?

edit: ENT_QUOTES olmadan html kodu:

<a href="#" onclick="makewindows('&quot;<form action='up.php' method='post'\r
\nenctype='multipart\/form-data'>\r\n<label for='file'>Filename:<\/label>\r\n<input 
type='file' name='file' id='file'\/> \r\n<br \/>\r\n<input type='hidden' name='pk' 
value='380118185183'>\r\n<input type='hidden' name='username' value='janmaybach'>\r
\n<input type='submit' name='submit' value='Submit' onclick=\&quot;setTimeout(function() 
{ updateByPk('Layer2', '380118185183', 'Ed Hardy', '1'); } ),1250);\&quot; 
\/>\r\n<\/form>&quot;'); return false;">Upload files</a>

Hala tıklanabilir değil ..., her şey düzgün alıntı gibi görünüyor?

Ben htmlspecial karakter olmadan çalıştığınızda, aşağıdaki html çıkış üretilir:

<input type='submit' name='submit' value='Submit' onclick=" settimeout(function()="" {="" updatebypk(="" layer2="" 380118179930="" ed="" hardy="" ,="" 1="" );="" }="" ),1250);="">
'); return false;"&gt;Upload files</a>

3 Cevap

Sorusuna yorumunda söylediğim gibi, bu kesinlikle korkunç kodu ve sonuçları acı ediyoruz. Asıl sorun kodu seviyelerinin sayısı: sunucu kodu Javascript işler, HTML render - ve fark her düzeyde kaçar ve birbirleri ile müdahale.

Durumu düzeltmek için, formu ile ayrı bir PHP sayfası var ve açılan bağlantı bu sayfa açmak var - Javascript gereklidir. Eğer gerçekten pahasına ayrı sayfa, en azından sayfada (dinamik olmayan) başlığındaki formu oluşturur JavaScript işlevi vardır ve link değişkenler olarak birlikte bu işlevi yalnızca bir çağrı içeren olduğunu önlemek istiyorsanız parametreleri.

Lütfen makewindows function ist'teki parametre alıntı değil. Sizin tırnak kaçtı (%#39). ' ile değiştirin ve bitirdiniz.

Sizin ENT_QUOTES bayrak çıktı bozuyor. Sadece kaçtı kişiler - Eğer yakından bakarsanız HTML çıktısında hiçbir gerçek tırnak olduğunu görürsünüz. Htmlspecialchars () kullanan bir test yapmak. Sen bir ters eğik çizgi ile tırnak kaçmak VEYA iyisi sedasız javascript işlevsellik eklemek gerekir. jQuery o http://jquery.com ulaşmak için yardımcı olabilir