【问题标题】:Allowing reserved characters in a URL允许在 URL 中使用保留字符
【发布时间】:2011-06-15 20:08:40
【问题描述】:

我正在一个函数中创建一个 URL,在 hook_form_alter 的实现中使用它来添加一个新按钮(我正在尝试解决这个问题:Drupal - Creating 'add another' buttons on node edit forms that will retain node relationships):

hook_form_alter的相关部分:

  if ($form_id === 'image_node_form') {         
        $form['buttons']['submit_again'] = array(
        '#type' => 'submit',
        '#value' => t('TEST'),
        '#weight' => 41,
        '#submit' => array('node_form_submit', 'add_another_node_form_submit'),
      );
  }

哪个使用函数:

function add_another_node_form_submit($form, &$form_state) {
    $refnode = $form['field_gallery'][0]['nid']['#default_value'];
    $refnode = 'node/add/image/'.$refnode.'?destination='.$_REQUEST['destination'];
    unset($_REQUEST['destination'], $_REQUEST['edit']['destination']);
    $form_state['redirect'] = $refnode;  
}

修改后的形式:

<form action="/node/add/image/189?destination=marketplace%252Fproperties%252Ftest"  accept-charset="UTF-8" method="post" id="node-form" enctype="multipart/form-data"> 
<div> 
<div class="node-form"> 
  <div class="standard"> 
<input type="hidden" name="changed" id="edit-changed" value=""  /> 
<input type="hidden" name="form_build_id" id="form-9869451ca1d3c9b91806442e39026622" value="form-9869451ca1d3c9b91806442e39026622"  /> 
<input type="hidden" name="form_token" id="edit-image-node-form-form-token" value="5b0ddf4a6a9bc7f54a61c666230169bf"  /> 
<input type="hidden" name="form_id" id="edit-image-node-form" value="image_node_form"  /> 
<input type="hidden" name="flag_friend_control" id="edit-flag-friend-control" value=""  /> 
<div class="form-item" id="edit-field-gallery-0-nid-wrapper"> 
 <label for="edit-field-gallery-0-nid">Marketplace item: </label> 
 test
</div> 
<div  id="edit-field-image-0-ahah-wrapper"><div class="form-item" id="edit-field-image-0-upload-wrapper"> 
 <label for="edit-field-image-0-upload">Image: <span class="form-required" title="This field is required.">*</span></label> 
 <div class="filefield-element clear-block"><div class="widget-edit"><input type="hidden" name="field_image[0][fid]" id="edit-field-image-0-fid" value="0"  /> 
<input type="hidden" name="field_image[0][list]" id="edit-field-image-0-list" value="1"  /> 
<div class="form-item" id="edit-field-image-0-upload-wrapper"> 
 <div class="filefield-upload clear-block"><input type="file" name="files[field_image_0]"  class="form-file" id="edit-field-image-0-upload" size="22" /> 
<input type="submit" name="op" id="edit-field-image-0-filefield-upload" value="Upload"  class="form-submit" /> 
</div> 
 <div class="description">Maximum file size: <em>2 MB</em><br />Allowed extensions: <em>png gif jpg jpeg</em></div> 
</div> 
</div></div> 
</div> 
</div><div class="form-item" id="edit-title-wrapper"> 
 <label for="edit-title">Caption: <span class="form-required" title="This field is required.">*</span></label> 
 <input type="text" maxlength="255" name="title" id="edit-title" size="60" value="" class="form-text required" /> 
</div> 
<fieldset class=" collapsible collapsed"><legend>Comment settings</legend><div class="form-radios"><div class="form-item" id="edit-comment-0-wrapper"> 
 <label class="option" for="edit-comment-0"><input type="radio" id="edit-comment-0" name="comment" value="0"  checked="checked"  class="form-radio" /> Disabled</label> 
</div> 
<div class="form-item" id="edit-comment-1-wrapper"> 
 <label class="option" for="edit-comment-1"><input type="radio" id="edit-comment-1" name="comment" value="1"   class="form-radio" /> Read only</label> 
</div> 
<div class="form-item" id="edit-comment-2-wrapper"> 
 <label class="option" for="edit-comment-2"><input type="radio" id="edit-comment-2" name="comment" value="2"   class="form-radio" /> Read/Write</label> 
</div> 
</div></fieldset> 
  </div> 
  <div class="admin"> 
    <div class="authored"> 
    </div> 
    <div class="options"> 
    </div> 
  </div> 
<input type="submit" name="op" id="edit-submit" value="Save"  class="form-submit" /> 
<input type="submit" name="op" id="edit-preview" value="Preview"  class="form-submit" /> 
<input type="submit" name="op" id="edit-submit-again" value="TEST"  class="form-submit" /> 
</div> 

</div></form> 

提交时,URL 显示(例如):

/node/add/image/214%3Fdestination%3Dmarketplace%25252Fproperties%25252Ftest-0

如何停止保留字符“?”并且 '?destination=' 中的 '=' 被转换为十六进制实体?

【问题讨论】:

  • 这段代码中没有任何东西执行 HTML 实体转换。
  • 哪些字符在什么时候被转换?你能举个例子吗?
  • 嗯,我已经编辑了问题,希望现在更清楚......
  • 这很奇怪 - 正如 Tomalak 所说,执行转换的代码中没有任何内容。你能显示表单的确切 HTML 源代码吗?
  • 您应该向我们提供有关使用的框架或功能集的更多信息。

标签: php drupal


【解决方案1】:

对,是因为 $form_state['redirect'] 需要使用数组:

https://drupal.stackexchange.com/questions/2436/how-do-i-include-and-in-a-form-redirection

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2023-03-06
    • 2011-01-02
    • 2011-03-14
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多