2016-05-04 2 views
0

PHPを使用しているときにテキストボックスのjavascriptでコンテンツを変更したいと思います。それが動作php varを使用したjavascriptコードが動作しないのはなぜですか?

echo "<script> var test = 0; simplemde.value('test'); 
test+= 5; alert(test);</script>"; 

:として私は、プレーンテキストでそれを変更した場合

。しかし、php変数を使用すると、それ以上は機能しません。

echo "<script> var test = 0; simplemde.value('$markdown'); 
test+= 5; alert(test);</script>"; 

私が間違っていることがわかりません。私がサイトを開いてソーステキストを見れば、そこには正しい形式がありますが、それはボックス内にありません。ここで

は私の完全なコードです:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
?> 
<!DOCTYPE html> 
<html> 
<head> 
<link rel="stylesheet" href="./css/markdown.css"> 
<script src="./js/markdown.js"></script> 
</head> 
<body> 

<textarea id="myID"> 
</textarea> 

<script> 
var simplemde = new SimpleMDE({ 
      element: document.getElementById("myID"), 
      spellChecker: false, 
      }); 

</script> 

<?php 
require_once './Michelf/Markdown.inc.php'; 
use \Michelf\Markdown; 
require_once 'loader.php'; 

$json_a = load(); 

if(count($json_a) > 0) 
{ 
    $text = $json_a[0]['blog']; 
    echo "found"; 
} 
else 
    echo "not found"; 

$markdown = Markdown::defaultTransform($text); 

echo $markdown; 

echo "<script> var test = 0; simplemde.value('test'); test+= 5; 
alert(test);</script>"; 
echo "<script> var test = 0; simplemde.value('$markdown'); 
test+= 5; alert(test);</script>"; 

?> 
</body> 
</html> 
+3

デバッグを開始...コンソールにエラーがありますか?あなたの「スクリプト」はあなたが望むようにレンダリングされていますか? – Rayon

+0

「警告」は2回か1回ですか? – jekaby

+0

@missjohannaは、このページにアクセスし、ソースコード内のJavaScriptコードを参照してください。 –

答えて

2

物事あなたの質問が欠落している:

  • $markdown
  • の値あなたがPHP
  • エラーを実行するために得る結果のJSブラウザのDeveloper Toolsコンソールに表示されるメッセージ

しかし、私たちはいくつかの仮定をすることができます。

Markdownは、プレーンテキストのように見えるものにドキュメントを書き込むためのテキストマークアップ言語です。その主要な機能の1つは、改行(段落を区切るために使用される)です。

リテラルの改行文字は、JavaScriptの文字列リテラルでは使用できません。

(でも、それらの仮定せずに、)いくつかの不特定のテキストを文字列リテラルの交換についての質問への答えのために(と言うのが妥当である:)

あなたはエスケープするか、そうでなければ持って$markdownで文字をエンコードする必要があります特別な意味。

これを行う最も簡単な方法は、JSリテラル構文と多かれ少なかれ同じJSONを利用することです。 $js_stringは、独自の引用符を取得しますので、あなたは、変数を出力するとき、手動でそれらを含める必要がないこと

$js_string = json_encode($markdown); 
echo "<script> var test = 0; simplemde.value($js_string); 
     test+= 5; alert(test);</script>"; 

注意。

+0

すべてのjsonを安全に埋め込むことはできません。 '\ u2028'と' \ u2029'と '/'も文字列でエスケープされるようにする必要があります。 'json_encode'はデフォルトでこれを正しく行いますが、フラグを追加するか、EcmaScript' JSON.stringify'を含む別のエンコーダでエンコードされたJSON文字列を使用して間違って行うことができます –

+0

@AnttiHaapala - デフォルトでjson_encodeがエスケープします – Quentin

関連する問題