サイト内検索:

WordPressでパーマリンクに日本語投稿名を使用しつつWPtouchを使っているとURLがおかしくなる問題を修正した。

WPtouchというプラグインがWordPressにあります。

このWPtouchを使うとWordPressのサイトを手軽にiPhone/Android端末に最適化されたサイトにしてくれるのでとても便利なのですが、WordPressのパーマリンク設定を「日付と投稿名」とか「月と投稿名」、つまり、日本語の記事タイトルをURL中に含むように設定していると、モバイル画面からPC画面に戻るためのリンクがおかしくなり、結果として存在しないページへのアクセスになってしまいます。

WPtouchはモバイル画面からPC画面への切り替えを同一ページURLへのリダイレクト、という形で実現しているのですが、このリダイレクトを自前で実装しているため、HTTPヘッダに日本語を食わせるような事が発生してしまいます。

PCブラウザやiPhoneのブラウザなどはこの状態でもちゃんと処理してくれるので、問題とはならないのですが、Androidの標準ブラウザだとやばいみたいです。もちろんRFC的にはAndroidのブラウザは正しいのですが、実際問題そうはいってられないので、WPtouch.phpに日本語を食わせないようにするコードを追加したので、もし同じような問題に遭遇している方の参考になればと思いここに紹介します。

wptouch.phpの513行目あたりから、

	   if (isset($_GET['wptouch_view'])) {
	  		if ($_GET['wptouch_view'] == 'mobile') {
				setcookie($key, 'mobile', $time, $url_path); 
			} elseif ($_GET['wptouch_view'] == 'normal') {
				setcookie($key, 'normal', $time, $url_path);
			}
			
			if ( isset( $_GET['wptouch_redirect'] ) ) {
				$protocol = ($_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
				$redirect_location = $protocol . $_SERVER['HTTP_HOST'] . $_GET['wptouch_redirect'];
			}
			
			header( 'Location: ' . $redirect_location );
			
			die;
		}

というコードが始まるのですが、この中の

$redirect_location = $protocol . $_SERVER['HTTP_HOST'] . $_GET['wptouch_redirect'];

の下に以下のようなコードを追加してあげると問題が解決します。

$redirect_location = $protocol . $_SERVER['HTTP_HOST'] . str_replace("%2F", "/",urlencode($_GET['wptouch_redirect']));

つまりこんなコードになります。

	   if (isset($_GET['wptouch_view'])) {
	  		if ($_GET['wptouch_view'] == 'mobile') {
				setcookie($key, 'mobile', $time, $url_path); 
			} elseif ($_GET['wptouch_view'] == 'normal') {
				setcookie($key, 'normal', $time, $url_path);
			}
			
			if ( isset( $_GET['wptouch_redirect'] ) ) {
				$protocol = ($_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
				$redirect_location = $protocol . $_SERVER['HTTP_HOST'] . $_GET['wptouch_redirect'];
				// -- begin modify ----
				$redirect_location = $protocol . $_SERVER['HTTP_HOST'] . str_replace("%2F", "/", urlencode($_GET['wptouch_redirect']));
				// -- end modify ----
			}
			
			header( 'Location: ' . $redirect_location );
			
			die;
		}

以上、業務連絡を兼ねたメモでした。

blog comments powered by Disqus

2011年アルファブロガー受賞

新着DVD

モバイル

Powered by Movable Type 6.1.2

ブログ内検索

BlogPeople ReviewMe!

このサイトのレビューとか応援コメントを書いてもらえると励みになります。

Affi☆List for Amazon

バナー広告

このブログ記事について

このページは、nagasawaが2011年4月 7日 15:42に書いたブログ記事です。

ひとつ前のブログ記事は「4月7日のラッキーさん」です。

次のブログ記事は「Android向け.NETアプリ開発環境「Mono for Android」、Novellが発売」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。