Mücadelesi - güvenle henüz doğru, bu metni kaçış

0 Cevap php

Bu bir benim son soru here. cevabı aslında orada çalışmıyor yayınlanmıştır kadar izleyin. Yani burada bir sorundur. Sen (jQuery dahil varsayalım) bu kodu verilmiştir:

<input type=text>
<script>
    $("input").val(**YOUR PHP / JS CODE HERE**);
</script>

JQuery kullanarak - ve giriş etiketi doğrudan PHP çıktı enjekte - sadakatle giriş etiketi veritabanından HERHANGİ metni yeniden. Veritabanı alan diyorsa </script>, alanı çok olduğunu söylemek gerekir. Bunun içinde Çince, çift tırnak, varsa ne olursa olsun, o da yeniden. PHP değişken $text denir varsayalım.

İşte benim başarısız girişimleri bazılarıdır.

1)

$("input").val("<?= htmlentities($text); ?>");

FAILURE: Reproduces character encoding exactly as is in text fields.
INPUT: $text = "Déjà vu"
OUTPUT: Field contains literal d&eacute;j&agrave; vu

2)

$("input").val(<?= json_encode($text); ?>);

This was suggested as the answer in my last question, and I naively accepted it. However...
FAILURE: json_encode only works with UTF-8 characters.
INPUT: $text = "Va e de här fö frågor egentlien"
OUTPUT: Field is blank, because json_encode returns null.

3)

var temp = $("<div></div>").html("<?= htmlentities($text); ?>");
$("input").val(temp.html());

This was my most promising solution for the weird characters, except...
FAILURE: Does not encode some characters (not sure exactly which, don't care)
INPUT: $text = "</script> Déjà"
OUTPUT: Field contains &lt;/script&gt; Déjà

4) yanıtlar Önerilen

$("input").val(unescape("<?= urlencode($text); ?>"));

ARIZA: Spaces + 'ın olarak kodlanmış kalır.

$("input").val(unescape(<?= rawurlencode($text); ?>"));

Almost çalışır. Önceki tüm giriş başarılı, ama multibyte şeyler, kanji gibi kodlanmış kalır. decodeURIComponent da baytlı karakterleri sevmez.

Benim için unutmayın, gibi şeyler strip_tags bir seçenek değildir. Herşey izin verilmelidir. İnsanlar bu sınavlar ile yazma, ve olan birisi HTML bilginizi test eden bir sınav yapmak, böylece olmak istiyorsa. Ayrıca, ne yazık ki sadece giriş etiketleri değer alanına htmlentities kaçtı metin ekleme yapamazsınız. Bu etiketler dinamik olarak oluşturulur, ve ben tamamen bu şekilde yapmak benim geçerli javascript kod yapısını yıkmak gerekir.

Burada SOL gibi hissediyorum. Ben nasıl yanlış bana göster.

EDIT

Initally </script> Déjà här fö frågor 漢字 db içine girilen kullanıcı varsayalım. Bu </script> Déjà här fö frågor &#28450;&#23383; olarak (phpMyAdmin içinde görmek istiyorum) saklanır

0 Cevap