Javascript Nesne My PHP VAR değeri kazma değil It (HTML Has)

2 Cevap php

Ben bir istemci (wordpress üstüne Binası) için bir CMS inşa ediyorum. Benim veritabanından dönen bazı verilerle bir sorun yaşıyorum.

Ben fare tıklaması üzerine benim sitenin bazı alanlarını güncelleyebilirsiniz böylece temelde PHP veri Javascript Nesneleri inşa ediyorum.

örnek (bu cezayı işe):

<script language = "Javascript>
  var myObject = new Object();

        function updateDiv(id)
        {
           myObject.name = '<?php echo $valueName ?>'; // $varHeadline = "Bob"
           myObject.headline = '<?php echo $value_headline ?>'; // $varHeadline = "My Story"

           var div = document.getElementById(id).innerHTML = myObject.name + 
           '<br>' + myObject.headline';
        }
</script>

Geri benim veritabanından getirmek veriler zaten bazı html olduğunda sorun gelir, ya da çizgi içinde keser.

Örnek:

    echo $varHeadline;
    // returns <h1>This is my headline</h1>
   //            This is part of the value too.

Yani bu verilerle bir JavaScript nesnesi oluşturursanız:

function updateDiv(id)
{
  myObject.headline = '<?php echo $varHeadline; ?>';
  var div = document.getElementById(id).innerHTML = myObject.headline;
}

I get errors in my Javascript. I would like to continue populating my divs with Javascript Object data, but am unable to on account of some of the data containing HTML (or even single or double quotes for that matter).

I DO want to retain my HTML formatting (the <h1> tags and so forth) so using htmlspecialchars or strip_tags is out of the question. Is there any die hard way of storing returned HTML without killing Javascript? Thanks in advance. -J

2 Cevap

json_encode () dize ve tırnak götürmek:

myObject.headline = <?php echo json_encode($varHeadline;) ?>;

Tabii ki, bu yazabiliriz:

<script language = "Javascript>
  var myObject = <?php echo json_encode(array('name'=>$valueName,'headline'=>$value_headline)); ?>;

        function updateDiv(id)
        {
           var div = document.getElementById(id).innerHTML = myObject.name + 
           '<br>' + myObject.headline';
        }
</script>

edit: Aşağıdaki açıklamalarda belirtildiği gibi, her zaman size sayfada yerleştirerek konum HTML güvenebilirsiniz emin olun. http://en.wikipedia.org/wiki/Cross-site_scripting: $ valueName veya $ value_headline kullanıcı girişi gelen ise, bu bazı diğer moda HTML doğrulamak yoksa, XSS saldırıları ve benzeri açık konum kötü bir fikirdir

Eğer "alıntı" sunucu tarafı değerleri bir sayfa içine bırakılan zaman, alıntı bağlam Javascript kodu ve HTML değil zaman farklı olmak zorunda. HTML için, tabii ki, içine dönüş 'işareti gibi şeyler yapmak "&" ve böylece "<" sembollerden daha-az, ve. Eğer HTML içine dize şeyler için gidiyoruz eğer onlar daha sonra olabilir, ama orada JavaScript ayrıştırıcı dize okuyor anda, sorun yok - Peki Javascript dizeleri içinde, az az ve-imi bir sorun değildir. Ne is bir sorun iyi ol '7-bitlik ASCII aralığı dışında tırnak ve karakterleridir. (Bu bir genelleme, ama ne demek istediğini anlıyorum.)

Ben PHP bilmiyorum ama HTML / XML için alıntı uygun düzgün gerçekleştirmek için değil bunu söylemek için bir yol olması var gibi görünüyor, ve bunun yerine Javascript dize sabitleri içinde özel olan karakterler korumak için bir şeyler yapmak.