2016-04-08 8 views
0

として表示されます。sqlからデータを取得し、各エントリの編集ボタン用のjavascriptを生成するためにphpを使用しています。編集インターフェースは、フォーム内のテキスト入力を使用します。生成された編集ボタンがクリックされると、このフィールド内のテキストはsqlからのエントリの名前と等しくなるように設定されます。引用符は、テキストフィールドに& QUOTに置き換えた場合にはhtml入力フィールドの二重引用符を含む文字列は、"

これは、( ")名前は、二重引用符が含まれている場合、すべての場合に予想される正常に動作し、

PHP genertaed javascriptのは以下の通りです:。

関数に渡される前に
function editButton($suffix,$name) 
{ 
    echo "<button class=\"edit\" onclick=\"editMode$suffix()\">Edit</button>"; 
    echo "<script> 
      <!-- 
      function editMode$suffix(){ 
       document.getElementById(\"title\").innerHTML = \"Edit Artist\" 
       var main = document.getElementById(\"main\"); 

       main.style.display = 'none'; 

       var edit = document.getElementById(\"edit\"); 
       edit.style.display = 'block';  

       //Set the input of the edit interface to be equal to the current name 
       document.getElementById(\"editInput\").value = \"$name\"; 
       document.getElementById(\"artEdit\").value = \"$name\"; 
      }  
      --> 
     </script>"; 
} 

$名変数が(にhtmlentitiesを経由して消毒されるが)。そうしないと、引用符を持つエントリの編集インタフェースにも表示されません。

を私はのように聞こえるどのこれを見つけました同じ問題が解決策がない(https://code.google.com/archive/p/embeddedjavascript/issues/19):/

誰かが解決策を持っている、または何か愚かなことを指摘することができます。この時点で、二重引用符の場合はデータベースエントリを無効にし、シングルに制限する必要があります。

答えて

0

ちょうどその$name変数にaddslashes()を使用し、単一引用符にJavaScriptの部分にあるすべての二重引用符を変更:

function editButton($suffix, $name) 
{ 
    $name = addslashes(html_entity_decode($name)); 
    echo "<button class='edit' onclick='editMode$suffix()'>Edit</button>"; 
    echo "<script> 
     <!-- 
     function editMode$suffix() { 
      document.getElementById('title').innerHTML = 'Edit Artist' 
      var main = document.getElementById('main'); 

      main.style.display = 'none'; 

      var edit = document.getElementById('edit'); 
      edit.style.display = 'block';  

      //Set the input of the edit interface to be equal to the current name 
      document.getElementById('editInput').value = '$name'; 
      document.getElementById('artEdit').value = '$name'; 
     }  
     --> 
    </script>"; 
} 

*はまた戻って初期状態にエンティティを変換するhtml_entity_decode()を追加しました。 htmlentities()を完全に削除することを検討してください。その場合は、上記のスクリプトからhtml_entity_decode()を削除できます。

+0

あなたは人生の節約に感謝します。 Idは一重引用符に切り替えようとしましたが、addslashes関数を認識していませんでした。非常に便利です。奇妙なことに、str_replaceを使って同じことをしようとしましたが、どこにも行きませんでした。 – blaze2374

関連する問題