【wordpress】GETパラメータを取得して表示した際の①文字化け②変数の値が全て取得出来ない問題を解決しよう。

こちらは前の記事の続きです。前の記事はこちら

https://hrk-programming.com/add_query_arg_get

$_GETで取得して表示した変数の値が、うまく読み取れなかったり文字化けしてしまったりする問題を解消します。問題点①及び問題点②は前回の記事から引用しています。

 

 

問題点1:変数 =「¥”取得¥”したID」

問題点①では「”取得”したID」となっていますがecho等で出力してみると「¥”取得¥”したID」という感じになります。それを解消する関数はwp_unslash()です。

 

wp_unslash()の使い方

<?php
$id = $_GET['id'] ?? 'IDを取得できませんでした';
echo esc_html($id); 

前回は上記のようなコードで表示させていましたが、echoで表示させる前にwp_unslash()で文字化けを解消させます。公式ではこの関数は「文字列からスラッシュ “/” を削除する関数」と言われていますが、¥”¥”から¥を削除する事も可能でした。

<?php
$id = $_GET['id'] ?? 'IDを取得できませんでした';
$id = wp_unslash($id);
echo esc_html($id); 

 

 

問題点2:変数 =「取」のみとなってしまう

問題点②の「id=取&得したID」を出力してみると「id=取」となってしまいます。それを解消する関数はurlencode_deep()です。半角の&は、GETパラメータが次の変数に切り替わったことを意味しますので今回のような問題が起こりました。

 

urlencode_deep()の使い方

前回のコード

<a herf="<?php echo add_query_arg( array( 'id' => $post_id, 'title' => $post_title) , esc_url( home_url() ).'/content' ); ?>">

urlencode_deep()は画面遷移前に、変数を定義する際に使用します。今回は変数定義とaタグを用いての画面遷移が同じタイミングになっています。urlencode_deep()を使うことでGETパラメータが一旦「id=%E3%80%80」の様に変換されます。その為GETパラメーターが次の変数に切り替わったと誤認識されずに変数を受け渡すことが可能になる訳です。

改善後のコード

<a herf="<?php echo add_query_arg(  urlencode_deep(array( 'id' => $post_id, 'title' => $post_title)) , esc_url( home_url() ).'/content' ); ?>">

 

以上の関数を用いることで文字化けや変数の受け渡しが上手くいかないトラブルを解決できた思います!少しでもお力添えできていたらとても嬉しく思います。

 

最終学歴高卒。実務未経験から自社開発&受託開発をしている企業に入社した、入社1年目のエンジニア。20代前半。
WordPress・PHP / Laravel・JavaScript

ひろきをフォローする

コメント

タイトルとURLをコピーしました