PHP-oluşturulan javascript ve tırnak işaretleri

7 Cevap php

Benim PHP kodu bazı javascript üreten ediyorum ve javascript değişkenler bazı php değişkenleri atamak gerekir. Ne yazık ki, bazen benim PHP değişkenleri tırnak işaretleri içerir. Örneğin:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = '{$foo}';</script>";

çıkan javascript bu gibi görünecektir, çünkü bir javascript hatası üretecektir:

<script type='text/javascript'>var foo = '"'Dis here be a \"string\"';

Ben \' tüm ' işaretleri yerine $ foo regexpi kullanabilirsiniz biliyorum ama bu çeşitli nedenlerle zordur. Bundan kısa yapabileceğimiz bir şey var mı? Perl q() function benzer bir şey ...

7 Cevap

Bunu yaparken denediniz mi?

$foo = "'Dis here be a \"string\"";
echo '<script type="text/javascript">var foo = "'.addslashes($foo).'";</script>';

Bkz: http://php.net/manual/en/function.addslashes.php

Bu doğru yönde atılmış bir adım olması gerekir:

addcslashes($str, "\"\r\n\\\t/\0..\37");

Emin misin? Değil mi:

var foo = ''Dis here be a "string"'


Çift 'denemek önlemek amacıyla:

$foo = "\'Dis here be a \"string\"";

veya

$foo = '\\\'Dis here be a "string"';

Ayrıca bir JavaScript dosyası olarak bir PHP dosyası kullanabilirsiniz değer hiçbir şey

<script type="text/javascript" src="js/main.php"></script>

Ve o dosyada PHP kodu çalıştırmak ve yankılanan tarafından JavaScript dosyasına yazmak mümkün olacaktır.

Eğer JavaScript nihai değerini kullanarak beri, ben kullanmak istiyorum json_encode:

$foo = "'Dis here be a \"string\"";
print "<script type='text/javascript'>var foo = " . json_encode($foo) . ";</script>";

Ve doğru çıktı olacaktır:

<script type='text/javascript'>var foo = "'Dis here be a \"string\"";</script>

Ben json_encode fonksiyon etrafında tırnak ekstra bir set koymadı dikkat edin. Bu otomatik olarak geçerli bir JavaScript dize yapmak için gerekli tırnak katacak.

Frank Farmer cevabı ilginç, ancak sekmeler gibi kaçtı olması gerekmez bazı şeyler kaçıyor.

Bu pasajı deneyin, gayet güzel çalışıyor:

<script type="text/javascript">
    alert("Hi!\n\tHi!\n<?php echo '\tHI!',"\\n\tHI!";?>");
</script>

Ben her zaman doğrudan JavaScript dizeleri içine metin geçmek benim PHP betikleri bir veritabanına bağlı olduğum için, benim kirli işler yapmak için real_escape_string üzerinde yalın. addslashes () satırsonlarını ve bazen Javascript geçen kulüpler dizeleri gizlice bu işlemez.

Basit bir $sql->real_escape_string($string) veritabanı JavaScript dostu forma tükürür ne kaçan, tüm iyi yapar.