Swiffyで変換されたファイルの Base64変換された画像を置換する方法
2014/06/26
Swiffyで変換されたファイルの Base64変換された画像を置換する方法
PHPで preg_match_all、preg_replace、str_replaceを使って任意の場所の文字列を置換する方法
Swiffyのテンプレートを作るツールを作成する際、置換する画像を「Base64」を目印にデータを置換する処理を作りましたが、置換する必要がない画像もあるわけです。
例えば、ABCという画像があり、Aと Cは置換するけど Bは置換せずにそのままにしておきたい。という場合です。
ですが、preg_replace、str_replaceの機能には、全部を置換する、1個目を置換する、と言った機能はありますが、「2個目」「1個目と 3個目」と言った場所を指定して変換する機能はありません。
PHPのコマンドのなかに、それを一つのコマンドで実行できるものはないようです。
そのため、いろいろ悩んだ結果、私が採った方法は、
・一度前から順番に置換
(その際、元に戻す部分に印を付けていく)
・印がついている部分を元に戻す
という感じです。
具体的なソースは、以下の通りです。
// 置き換える場所を指定
$replase_array = array (1,4);
// 置き換えるコードのスタートのカウント
$replase_cnt = 1;
// swiffyで変換されたファイルの中身
$subject
// 置換する文字列の事前チェック
preg_match_all ( '/base64,[A-Za-z0-9+\/\n=]*"/', $subject, $matches_array );
$i = 1;
foreach ( $matches_array[0] as $val ) {
$matches[$i] = $val;
$i++;
}
$matches_cnt = count ( $matches );
// 「base64,」をキーに画像部分を置換
for ( $i = 1; $i <= $matches_cnt; $i++ ) {
if ( in_array ( $i, $replase_array ) ) {
$replacement = 'base64,"';
$replase_cnt++;
} else {
$replacement = 'base64,"';
}
$subject = preg_replace( '/base64,[A-Za-z0-9+\/\n=]*"/', $replacement, $subject, 1 );
}
// 置換する必要がなかった部分を元に戻す
for ( $i = 1; $i <= $matches_cnt; $i++ ) {
$replasement = 'base64,"';
$subject = str_replace ( $replasement, $matches["$i"], $subject );
}
これを関数化できればいいのですが、
↓こんな部分とか
$replacement = 'base64,"';
↓こんな部分とか
$replacement = 'base64,"';
を汎用性がある書き方にする方法がピンと来なくて、今のところ関数化はしていません。
今後、何度か同じ様な処理が必要になった際に、どのように汎用的な関数にするべきか、改めて考えたいと思います。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
Googleマップの企業名検索で出る人気キーワードを変更する方法を探る
企業名検索をして表示されるキーワードは気になるところですが、この項目を変更することができるのか?調べて見ましたが編集できないようです。
-
-
Google Swiffyの使い方 【4】Swiffyに FlashVars的テキスト渡しで発生する不具合(テキストの背景が黒くなる)(テキストが上にずれる)
Google Swiffyの使い方 【4】Swiffyに FlashVars的テキスト渡しで発生する不具合(テキストの背景が黒くなる)(テキストが上にずれる)
-
-
Google Swiffyの使い方 【2】日本語の文字化けについて
Google Swiffyの使い方 【2】日本語の文字化けについて。Google Swiffyは日本語に対応していませんので、その対応方法についての説明です。
-
-
Google Swiffyの使い方 【5】Swiffyの画像を差し替える方法
Google Swiffyの使い方 【5】Swiffyの画像を差し替える方法を解説。
-
-
Google reCAPTCHAのSite key、Secret keyの取得方法・20170408バージョン
ログイン画面や登録画面に出てくるreCAPTCHAの「私はロボットではありません」の実装には利用するサイトの登録が必要。その登録方法を詳細解説。設定ミスによる不具合の分類、解決方法を解説。
-
-
ブログを何時に更新?投稿時間でアクセス数をアップさせる方法
ブログの更新時間を調整してアクセス数をアップさせる方法の解説です。自分のサイトのアクセス状況を知ることも大切でそれによってわかることも解説しています。
-
-
Google Swiffyの使い方 【3】Swiffyに FlashVars的にテキストを渡す方法(Swiffyでは扱えない文字「%」「+」「&」)
Google Swiffyの使い方 【3】Swiffyに FlashVars的にテキストを渡す方法(Swiffyでは扱えない文字「%」「+」「&」)
-
-
GoogleのSNS・Google+とFacebookの違いと設定方法解説
GoogleのSNSであるGoogle+の特徴(Facebook、Mixiとの違い)を解説し、アカウントの設定方法の説明。
-
-
Google Swiffyの使い方 【1】基本編
Google Swiffyの使い方 【1】基本編。Google Swiffyの使い方を説明するシリーズの 1本目として、基本的な使い方、仕組みを説明します。
-
-
ads.txtの設置方法解説。AdSenseの警告への対処と設置の確認方法
ある日突然Googleがads.txtを設置せよと警告を発した。AdSenseの画面に真っ赤な警告が表れて戸惑ったが、ads.txtは簡単な1行のテキストファイルを設置するだけなので、作業をする気になれば簡単だ。