フォーラムへの返信

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック投稿者 metal_rak

    (@metal_rak)

    LVP8様ありがとうございます。
    あれから調査を進め、正しくエンコードされた値が渡されていることも確認できました。

    さらなる調査の結果、以下の部分がどうやら原因であることが判明し修正したら日本語パラメータが消されることなく、表示されました。

    【原因の概要】
    canonical.php「redirect_canonical関数」のリダイレクト判定処理において、
    リクエストされたURLとリダイレクト後のURLの値が絶対に一致せずリダイレクトループを起こした。

    ■イメージ
    リクエストされたURL:http://example.com/result/page/2?region=%E6%9D%B1%E4%BA%AC%E9%83%BD&kind=%E4%B8%AD%E8%8F%AF
    リダイレクト後のURL:http://example.com/result/page/2?region=東京都&kind=中華

    【箇所】
    redirect_canonical関数のL255あたりで、リダイレクト後のURLのGETパラメータにデコード後の文字列が設定される。

    【修正方法】
    自己レスした、wp_sanitize_redirectへの修正は不要。
    修正するのはcanonical.phpのredirect_canonical関数のみ。

    canonical.php L255あたり

    // tack on any additional query vars
    	$redirect['query'] = preg_replace( '#^\??&*?#', '', $redirect['query'] );
    	if ( $redirect_url && !empty($redirect['query']) ) {
    		$redirect_q_back = $redirect['query'];	// 処理追加
    		parse_str( $redirect['query'], $_parsed_query );
    		$redirect = @parse_url($redirect_url);
    
    		if ( ! empty( $_parsed_query['name'] ) && ! empty( $redirect['query'] ) ) {
    			parse_str( $redirect['query'], $_parsed_redirect_query );
    
    			if ( empty( $_parsed_redirect_query['name'] ) )
    				unset( $_parsed_query['name'] );
    		}
    
    		// $redirect_url = add_query_arg( $_parsed_query, $redirect_url );
    		$redirect_url = $redirect_url . $redirect_q_back;// 処理変更
    	}

    色々と勉強になりました。

    トピック投稿者 metal_rak

    (@metal_rak)

    pluggable.phpのwp_sanitize_redirect関数を以下のように修正することで、日本語のパラメータが消えなくなりました。

    しかし、今度はリダイレクトループに陥ってしまい、結局表示されません。
    なぜなのでしょうか(><)困り果てました。

    function wp_sanitize_redirect($location) {
    	// 日本語(漢字・ひらがな・カタカナ・全角英数字 ※半角カナは含まず)を削除しないように変更
    	// $location = preg_replace('|[^a-z0-9-~+_.?#=&;,/:%!]|i', '', $location);
    	$location = preg_replace('|[^a-z0-9-~+_.?#=&;,/:%!]&[^一-龠]&[^ぁ-ん]&[^ァ-ヴ]&[^a-zA-Z0-9]|i', '', $location);
2件の返信を表示中 - 1 - 2件目 (全2件中)