2012-08-02 7 views
7

私はwysihtml5 wysiwygエディタを使用しています。wysihtml5。イメージsrcとhrefは削除されました

image src属性とlink href属性がhtmlから削除されるという問題があります。サーバーでは、すでにhtmlを剥奪されています。

どうすればこの問題を解決できますか?

私はadvanced.js rulestを使用しています。すべてのルールで。

Editor

UPDATE 1

まあeditor.getValuejquery().val() for textareaは、提出フォームに同じ値を与えます。フォームを正しく送信する必要があることを意味します。

しかし、私はブラウザから送信されたPOSTリクエストを見ました。それはURLなしです。何か問題でも。

UPDATE 2

私はIMGとの接続ルールセットすべてのものから削除した場合、それにもかかわらず、それはinproperly動作します。

UPDATE Marrowmawのコメントに応答して、3

私は期待しています:

<a href="http://domain.com/" title="Link: http://domain.com">Link</a> 

しかし、私は取得

<a href="" title="Link: Null">Link</a> 

UPDATE 4

<div id="wysihtml5-toolbar" style="display: none;"> 
     <button class="btn" data-wysihtml5-command="bold"> 
     {{ "Bold"|trans }} 
     </button> 
     <button class="btn" data-wysihtml5-command="italic"> 
     {{ "Italic"|trans }} 
     </button> 
     <button class="btn" data-wysihtml5-command="createLink"> 
     {{ "Link"|trans }}/{{ "Unlink"|trans }} 
     </button> 
     <button class="btn" data-wysihtml5-command="insertUnorderedList"> 
     * 
     </button> 
     <button class="btn" data-wysihtml5-command="insertOrderedList"> 
     1,2,3 
     </button> 
     <button class="btn" data-wysihtml5-command="formatBlock" data-wysihtml5-command-value="h1"> 
     {{ "Heading"|trans }} 
     </button> 
     <button class="btn" data-wysihtml5-command="insertImage"> 
     {{ "Image"|trans }} 
     </button> 

     <div data-wysihtml5-dialog="createLink" style="display: none;"> 
      <label> 
      {{ "Link"|trans }}: 
      <input data-wysihtml5-dialog-field="href" value="http://"> 
      </label> 
      <a data-wysihtml5-dialog-action="save">{{ "Save"|trans }}</a>&nbsp;<a data-wysihtml5-dialog-action="cancel">{{ "Cancel"|trans }}</a> 
     </div> 
      <!-- Dialog --> 
     <div data-wysihtml5-dialog="insertImage" style="display: none;"> 
      <label> 
      URL: <input data-wysihtml5-dialog-field="src" value="http://"> 
      </label> 
      <label> 
      Alternative text: <input data-wysihtml5-dialog-field="alt" value=""> 
      </label> 
      <label> 
       {{ "Align"|trans }}: 
       <select data-wysihtml5-dialog-field="className"> 
        <option value="">{{ "default"|trans }}</option> 
        <option value="wysiwyg-float-left">{{ "left"|trans }}</option> 
        <option value="wysiwyg-float-right">{{ "right"|trans }}</option> 
       </select> 
      </label> 
      <a data-wysihtml5-dialog-action="save">{{ "Save"|trans }}</a>&nbsp;<a data-wysihtml5-dialog-action="cancel">{{ "Cancel"|trans }}</a> 
     </div> 
     </div> 
     <form action="{{ path('###_save_homepage') }}" method="POST" > 
     <textarea id="wysihtml5-textarea" placeholder="{{ "Enter your text"|trans }}..." autofocus name="homepage" style="width:700px;height:400px;">   
      {{ homepage|raw }}   
     </textarea> 
     <input type="submit" value="{{ "Save"|trans }}" class="btn" /> 
    </form> 

とJSのinit:

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    var editor = new wysihtml5.Editor("wysihtml5-textarea", { // id of textarea element 
      toolbar:  "wysihtml5-toolbar", // id of toolbar element 
      parserRules: wysihtml5ParserRules // defined in parser rules set 
     });  

    }); 

</script> 
+0

更新された投稿の詳細 –

+0

htmlがサーバに送信される前に削除されるのですか、またはクライアントとサーバの間のどこかで削除されますか?後者の場合は、HTMLをエスケープしてから送信し、もう一方の端でエスケープすることができます。 – starbeamrainbowlabs

+0

それは%の間のどこかにあるようです。 –

答えて

16

参照しているwysihtml5-x.x.x.jsファイルを見てみましょう。

彼らは絶対URL(XSSに対する保護の名の下に)だけを許可すると決めました。下記のコードは、あなたがそのトレードオフに慣れていれば、基本的にどんな価値も取ることができます。 "VaRのattributeCheckMethods" と作る以下の変更

はCtrl-Fを - source

var attributeCheckMethods = { 
url: (function() { 
    /*var REG_EXP = /^https?:\/\//i;*/ 
    return function(attributeValue) { 
    /*if (!attributeValue || !attributeValue.match(REG_EXP)) { 
     return null;*/ 
    if (!attributeValue) { 
     return ""; 
    } 
    /*return attributeValue.replace(REG_EXP, function(match) { 
     return match.toLowerCase(); 
    });*/ 

    var parser = document.createElement('a'); 
    parser.href = attributeValue; 

    if ( parser.protocol == 'http:' 
     || parser.protocol == 'https:' 
     || parser.protocol == 'ftp:' 
    ) return attributeValue; 
    }; 
})(), 
1

wysihtml5は、マークアップを検証する方法を明示的に厳しいです。 URLまたはSRCが検証されない場合は省略されます。

私はparser_rules/advanced.jsファイルを調べます。各タグを検証するルールを削除、変更、編集することができます。

関連する問題