web-dev-qa-db-ja.com

drupal_goto(request_uri())は、URLの「?」、「=」、「&」を置き換えます

Example.com/node/add/dispo?arg1=1&arg2=2のページから同じタイプのURLにユーザーをリダイレクトする必要があります。しかし、単にdrupal_goto(request_uri());を実行すると、ユーザーがexample.com/node/add/dispo%25F%3Cなどにリダイレクトされます。

Str_replaceを試しましたが、うまくいきませんでした。

何か回避策はありますか?

11

drupal_goto() は、_$options_パラメータを url() 関数に渡すことを受け入れます。次のようなクエリ文字列を渡すことができます。

_$options = array('query' => array('foo' => 'bar'));
drupal_goto('path', $options);
_

その例は/ path?foo = barに転送します

32
Clive

これはクライヴの答えと同じです。正しいIMOですが、ユースケース1:1に適した答えを追加したいと思います。

_$options = array('query' => drupal_get_query_parameters());
drupal_goto(current_path(), $options);
_

現在の場所と同じ場所にdrupal_goto()を呼び出す必要がありました。

_mysite.com/node/add/dispo?arg1=1&arg2=2
_

current_path() はnode/add/dispoを返します。 drupal_get_query_parameters() は、内部パスノード/追加/ディスポである_$_GET_を除くすべての_$_GET['q']_パラメータを返します。

drupal_goto()を呼び出すと、Drupalはユーザーを送信する同じURIを再構築できます。

13
AyeshK

drupal_goto($GLOBALS['base_root'] . request_uri());を使用することもできます

渡されたパラメーターが内部のdrupal実際に問題の原因である)パスであるかのようにurlencodeされているdrupal_goto(request_uri());とは異なることに注意してください。

0
Anonymous