393

JavaScript変数への出力用にPHP文字列をエンコードする最も簡単な方法は何ですか?

引用符と改行を含む PHP 文字列があります。この文字列の内容を JavaScript 変数に入れる必要があります。

通常、私は JavaScript を PHP ファイルで構築します。

<script>
  var myvar = "<?php echo $myVarValue;?>";
</script>

$myVarValueただし、引用符や改行が含まれている場合、これは機能しません。

4

14 に答える 14

545

他の誰かの答えを拡張する:

<script>
  var myvar = <?php echo json_encode($myVarValue); ?>;
</script>

json_encode()を使用するには、次のものが必要です。

  • PHP5.2.0以降
  • $myVarValueUTF-8(またはもちろんUS-ASCII)としてエンコードされます

UTF-8は完全なUnicodeをサポートしているため、その場で変換しても安全です。

json_encodeスラッシュを前にエスケープするため、を含む文字列でも</script>、スクリプトブロックを使用して印刷するために安全にエスケープされることに注意してください。

于 2008-10-03T21:49:08.637 に答える
28

JSONでエンコードする

于 2008-10-03T18:33:50.967 に答える
25
function escapeJavaScriptText($string)
{
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\")));
}
于 2008-10-03T18:38:29.303 に答える
13

偏執的なバージョン:すべての文字をエスケープします

function javascript_escape($str) {
  $new_str = '';

  $str_len = strlen($str);
  for($i = 0; $i < $str_len; $i++) {
    $new_str .= '\\x' . sprintf('%02x', ord(substr($str, $i, 1)));
  }

  return $new_str;
}

編集:json_encode()適切ではない理由は"、生成されるのを防ぐ必要がある場合があるためです。

<div onclick="alert(???)" />
于 2011-04-23T09:32:45.943 に答える
7
<script>
var myVar = <?php echo json_encode($myVarValue); ?>;
</script>

また

<script>
var myVar = <?= json_encode($myVarValue) ?>;
</script>
于 2012-11-29T14:16:14.730 に答える
5

私がカスタマイズしなければならなかったサイトはUTF-8ではなかったので、以下のMicahのソリューションは私のために働いたので、jsonを使うことができませんでした。私はそれを投票しますが、私の担当者は十分に高くありません.

function escapeJavaScriptText($string) 
{ 
    return str_replace("\n", '\n', str_replace('"', '\"', addcslashes(str_replace("\r", '', (string)$string), "\0..\37'\\"))); 
} 
于 2010-03-11T16:50:29.197 に答える
4

ただし、実行しないでくださいaddslashes()。HTML ページのコンテキストにいる場合、HTML パーサーは</script>文字列の途中であってもタグを認識し、それが JavaScript の終わりであると想定します。

<?php
    $value = 'XXX</script><script>alert(document.cookie);</script>';
?>

<script type="text/javascript">
    var foo = <?= json_encode($value) ?>; // Use this
    var foo = '<?= addslashes($value) ?>'; // Avoid, allows XSS!
</script>
于 2012-10-19T09:50:12.717 に答える
3

あなたは試すことができます

<script type="text/javascript">
    myvar = unescape('<?=rawurlencode($myvar)?>');
</script>
于 2008-10-03T18:50:19.730 に答える
3

非表示の DIV に挿入してから、DIV の innerHTML を JavaScript 変数に割り当てることができます。何かを逃す心配はありません。そこに壊れた HTML を入れないように注意してください。

于 2008-10-03T18:39:14.887 に答える
3
  1. しないでください。Ajax を使用するdata-*か、HTML の属性に入れるか、その他の意味のあるものにします。インライン スクリプトを使用するとページが大きくなり、安全でないか、ユーザーがレイアウトを台無しにする可能性があります。ただし、…</p>

  2. …より安全な関数を作成します。

    function inline_json_encode($obj) {
        return str_replace('<!--', '<\!--', json_encode($obj));
    }
    
于 2014-01-08T18:19:06.007 に答える
1

html特殊文字

説明

string htmlspecialchars ( string $string [, int $quote_style [, string $charset [, bool $double_encode ]]] )

特定の文字は HTML で特別な意味を持ち、その意味を保持する場合は HTML エンティティで表す必要があります。この関数は、これらの変換の一部が行われた文字列を返します。作成された翻訳は、日常の Web プログラミングに最も役立つものです。すべての HTML 文字エンティティを翻訳する必要がある場合は、代わりに htmlentities() を使用してください。

この関数は、メッセージ ボードやゲスト ブック アプリケーションなどで、ユーザーが指定したテキストに HTML マークアップが含まれないようにするのに役立ちます。

実行される翻訳は次のとおりです。

* '&' (ampersand) becomes '&amp;'
* '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
* ''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
* '<' (less than) becomes '&lt;'
* '>' (greater than) becomes '&gt;'

http://ca.php.net/htmlspecialchars

于 2008-10-03T18:37:46.230 に答える
-1

これが悪い習慣なのかどうかはわかりませんが、私のチームと私は、html、JS、および php を組み合わせたソリューションを使用してきました。JS 変数に取り込みたい PHP 文字列から始めて、それを呼び出します。

$someString

次に、ページ内の隠しフォーム要素を使用し、その値を文字列として設定します。

<form id="pagePhpVars" method="post">
<input type="hidden" name="phpString1" id="phpString1" value="'.$someString.'" />
</form>

次に、document.getElementById を使用して JS var を定義するだけです。

<script type="text/javascript" charset="UTF-8">
    var moonUnitAlpha = document.getElementById('phpString1').value;
</script>

これで、PHP 文字列値を取得したい場所ならどこでも JS 変数「moonUnitAlpha」を使用できるようになりました。これは私たちにとって非常にうまく機能しているようです。過酷な使用に耐えるかどうかを確認します。

于 2010-08-27T00:28:00.340 に答える
-2

テンプレート エンジンを使用して HTML を作成する場合は、好きなように入力できます。

XTemplatesをチェックしてください。これは、優れたオープン ソースの軽量なテンプレート エンジンです。

HTML/JS は次のようになります。

<script>
    var myvar = {$MyVarValue};
</script>
于 2008-10-03T18:35:45.690 に答える