2012-08-02 33 views
7

我正在使用wysihtml5 wysiwyg编辑器。wysihtml5。图像src和href被剥离

问题是,图像的src属性和链接href属性被剥离从HTML。在服务器我已经被剥夺了HTML。

我该如何解决这个问题?

我正在使用advanced.js规则。遵守所有规则。

Editor

更新1

editor.getValuejquery().val() for textarea给出的形式相同的值提交。意味着表格应该正确发送。

但我观看了浏览器发送的POST请求。它没有网址。有问题。

更新2

如果我从与IMG连接的规则集一切删除,但它的工作原理inproperly。

UPDATE 3

响应于Marrowmaw评论。

我期待:

<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初始化:

<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更新后的详细信息 – 2012-08-02 09:10:45

+0

html在发送到服务器之前是否被剥离,还是在客户端和服务器之间被剥离?如果是后者,那么你可以在发送html之前将其转义出来,并在另一端将其隐藏起来。 – starbeamrainbowlabs 2012-08-02 09:51:15

+0

似乎介于%) – 2012-08-02 09:54:54

回答

16

请尝试查看您引用的wysihtml5-x.x.x.js文件。

他们决定只允许绝对URL(以防XSS为名)。下面的代码基本上可以让你在任何价值的情况下获得任何价值。

按Ctrl-F为 “VAR attributeCheckMethods”,并进行以下更改 - 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文件。您可以删除,修改和编辑验证每个标签的规则。