2012-08-02 11 views
7

Ich benutze Wysihtml5 Wysiwyg Editor.wysihtml5. Image src und href sind entfernt

Das Problem ist, dass Bild src Attribut und Link href Attribut von HTML entfernt werden. Auf dem Server bekomme ich bereits HTML entfernt.

Wie kann ich dieses Problem beheben?

Ich verwende advanced.js Regel. Mit allen Regeln.

Editor

UPDATE 1

Well editor.getValue und jquery().val() for textarea geben gleiche Werte auf Formular. bedeutet, dass das Formular korrekt gesendet werden soll.

Aber ich habe POST-Anfrage beobachtet, die vom Browser gesendet wird. und es ist ohne URLs. Etwas stimmt nicht.

UPDATE 2

Wenn ich von ruleset alles mit img verbunden zu entfernen, doch es funktioniert inproperly.

UPDATE 3

Als Reaktion Kommentar Marrowmaw.

Ich erwarte:

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

Aber ich bekomme

<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> 

Und 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

i'v Post mit Details aktualisiert –

+0

Wird die HTML-Datei entfernt, bevor sie an den Server gesendet wird, oder wird sie irgendwo zwischen dem Client und dem Server entfernt? Wenn es das letztere ist, dann könntest du den HTML-Code vor dem Senden entschlüsseln und ihn am anderen Ende entpacken. – starbeamrainbowlabs

+0

Es scheint, dass irgendwo zwischen%) –

Antwort

16

Werfen Sie einen Blick auf die Datei wysihtml5-x.x.x.js, auf die Sie verweisen.

Sie entschieden, dass sie nur absolute URLs erlauben würden (im Namen des Schutzes gegen XSS). Der folgende Code ermöglicht es Ihnen im Grunde, jeden Wert zu nutzen, wenn Sie mit dieser Abwägung einverstanden sind.

Strg-F für "var attributeCheckMethods" und die folgenden Änderungen vornehmen - 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

Die Art und Weise der wysihtml5 Markup validiert ist ausdrücklich streng. Wenn die URL oder SRC nicht validiert wird, wird sie weggelassen.

Ich würde die Datei parser_rules/advanced.js untersuchen. Sie können die Regeln entfernen, ändern und bearbeiten, die die einzelnen Tags validieren.

Verwandte Themen