えったんブログ

30過ぎてえったんってどうなのよ、と思いつつ
なんとなく続ける夫婦えったん&marchのブログ
<< 大地震キタ━━(゜∀゜)━━!!!! :: main :: よかったら… >>

PHPで正規表現使ってHTML内のaタグのURL部分にuidを追加したい!

なんかリンクURLのクエリにuid=NULLなんたらとかつけなくちゃいけないのに、
そういうときにかぎって絶対どっかで忘れちゃって大変なときがある。
だったら自動でつければいいじゃん。
「正規表現 URL 表現」「php aタグ 置き換え」とかでググればいろいろでてくるし。
ってな感じですぐできるかと思いきや、延べ3日間も解決まで
時間がかかってしまったので、とりあえずメモっとく。

$htmlに表示したいHTMLがズラーっと入ってるとする。
その中にはaタグがわんさか。
しかも何かPCに関係ないaccesskeyとか入ってたり
もうすでに他のクエリさんがいたり、uidも僅かながら付いてるやつもあったり
無視したい#のページ内リンクや、mailtoリンク(あ、telを忘れてた)なんかも
あったりするややこしい状態だけど、とりあえずそこらへん吸収して
自動でuid=NULLっていうクエリがついてくれればいいのよ、URLに。
というphpのソースコード。

//
// $html内のaタグのリンクURLにuid=NULLのクエリを追加する。
// ただしページ内リンクやmailtoリンクにはつけない。
// もうuidなんたらがついてたら何もしない。
// href以外にaccesskeyとかついてたらそれも残す。
//
$pattern = '/(<a href=["\'])(.*?)(["\'](?:\s?.*?)?>)/i'; //1→(<a href="),2→(URL),3→(" accesskey="x">)
$replace = 'add_uidNULL';
$html = preg_replace_callback($pattern, $replace, $html);

//出力
header("Content-Type: application/xhtml+xml;charset=Shift_JIS");
print $html;
exit;


/*
* preg_replace_callback - コールバック関数
* URL部分にuid=NULLを付加する
*
*/
function add_uidNULL($match) {

$ret = "";

// 通常は、$matches[0] がマッチした全体を表します。
// $matches[1] は、マッチした中で、パターン内の最初の '(...)'
// にあてはまる部分を表します。それ以降も同様です。

// print "<form><textarea cols=100 rows=8 wrap=off>";
// print "0 → ".$match[0]."\n"; //全部
// print "1 → ".$match[1]."\n"; //<a href="
// print "2 → ".$match[2]."\n"; //URL
// print "3 → ".$match[3]."\n"; //"...>

//URLチェック
if (eregi("^#", $match[2]) || eregi("^mailto:", $match[2])) { //ページ内ジャンプまたはmailtoなら
//そのまま返す
$ret = $match[1].$match[2].$match[3];
} else {
//UID=NULLを付加
if (eregi("uid\=", $match[2])) {
//すでにuid=クエリがついているならなにもしない
//そのまま返す
$ret = $match[1].$match[2].$match[3];
} else if (eregi("\?", $match[2])) {
//すでに何かクエリがついているなら&で付加
$ret = $match[1].$match[2]."&uid=NULL".$match[3];
} else {
//はじめてのクエリなら?で付加
$ret = $match[1].$match[2]."?uid=NULL".$match[3];
}
}

// print "ret → ".$ret;
// print "</textarea></form>";

return $ret;

}
使ったことなかったけど、preg_replaceのコールバックって意外とベンリね。
ケータイ -
2008.03.18 Tuesday :: comments (0) :: trackbacks (0)

「PHPで正規表現使ってHTML内のaタグのURL部分にuidを追加したい!」の評価です。


Comments

Comment Form

Trackbacks