Bu tür sorunları için çözüm nedir?

2 Cevap php
<a onclick="run(&#039;Hi, Tim!  I&amp;#039;ve got two&#039;, &#039;">test</a>

onclick olay hiç çalışmaz.

Yukarıda böyle bir şey tarafından oluşturulur:

<a onclick="run(<?php echo htmlentities($str) ?>)">test</a>

Bunu nasıl düzeltebilirim?

2 Cevap

Bunu alıntı olmadan bir dize içeriğini çıkış vardır

'' Yankı ifadeler koymak

<a onclick="run('<?php echo htmlentities($str) ?>')">test</a> 

Bu arada, &#039; = '

$str varlık olarak kodlanmış olmaktan önce, bir:

'Hi, Tim!  I&#039;ve got two', '

hangi açıkça literal geçerli bir JavaScript dize değil. Kesme henüz olmamalıdır, hangi HTML kodlanmış olduğunu ve bazı sondaki saçmalık var.

Sen json_encode işlevini kullanarak JavaScript dize (ve diğer) değişmezleri oluşturmanız gerekir. : Eğer $ olarak rawstr varsa

Hi, Tim!  I've got two

sonra json_encode Sana doğru JavaScript dize verecektir:

'Hi, Tim!  I\'ve got two'

böylece bir HTML olay işleyicisi öznitelik içine ekleyebilirsiniz:

<a onclick="run(<?php echo htmlspecialchars(json_encode($rawstr)) ?>); return false;">test</a>

Not htmlspecialchars(), ikincisi genellikle-gereksiz tüm ASCII olmayan karakterleri HTML-kaçış gibi, htmlentities() tercih olduğu, hangi karışıklık onları size doğru belirtmezseniz eğer charset.

PHP 5.3 itibaren, HTML-özel karakterler size bir kodlama adım kaydeder json_encode dan çıktı, asla olmasını sağlamak için JSON_HEX_ bayrakları kullanabilirsiniz:

<a onclick="run(<?php echo json_encode($rawstr, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT) ?>); return false;">test</a>

Hayatınızı kolaylaştırmak için, saklanması bu ortak çıkış-ile-kaçan daha basitçe adlı fonksiyonları içine yöntemleri:

function h($s) {
    echo htmlspecialchars($s, ENT_QUOTES);
}
function j($s) {
    echo json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT|JSON_HEX_APOS);
}
function u($s) {
    echo urlencode($s);
}

<a onclick="run(<?php j($rawstr); ?>); return false;">test</a>

Ve hatta daha iyi, komut bağlanarak tüm niteliklerini inline olay işleyicisi kullanmaktan kaçının:

<a id="test">test</a>
...
<script type="text/javascript">
    document.getElementById('test').onclick= function() {
        run(<?php j($rawstr); ?>);
        return false;
    };
</script>