[PHP-users 31414] Re: HTML中の置換え処理
江頭 竜二
ryu-ring.woo @ cap.ocn.ne.jp
2007年 2月 7日 (水) 11:19:45 JST
江頭です。質問があいまいですいませんでした。
outputfiltersを利用する前提での質問でした。
preg_replaceを使って出力直前に置換えを行いたいのですが、
以下のように単純にキーワードの置換えを行うと、
Aタグの中のキーワードに対してもリンクを貼ってしまったり、
imgタグのalt属性までリンクを貼ってしまったりと
タグがぐちゃぐちゃになって困ってました。
function smarty_outputfilter($output, &$smarty)
{
return preg_replace('keyword',
'<a href="link">$1</a>', $output);
}
置換えのいい方法はないでしょうか?という事なんです。
よろしくお願い致します。
ml wrote:
> こんにちは渡辺と申します。
>
> Smartyであれば、
> register_outputfilter()
> という関数を使えば、出力直前の文字列を、どうにでも加工できますよ。
>
> http://www.phppro.jp/phpmanual/smarty/advanced.features.outputfilters.html
>
>
>
>> k.teke2です。
>>
>> 何を尋ねているのかサッパリ解らないのですが、
>>
>>
>>> ・テンプレート処理が終わり、出力の直前に、テンプレート内を検索する。(検
>>> 索対象は素のHTMLと思って下さい)
>>> ・指定したタグに囲まれているキーワードにのみリンクを貼る。(bodyタグ、
>>> divタグなど)
>>> ・指定したタグに囲まれているキーワードは無視する。(aタグ、h1タグなど)
>>> ・タグの属性に現れるキーワードは無視する。(imgタグのalt属性など)
>>> ・定型のテンプレートだけに対応するような処理ではなく汎用的な処理にしたい。
>>> (idで指定した場所だけを検索するというのは無しです)
>>>
>> 上記の事を、実現出来るやり方を1から教えて、と言う事でしょうか?
>> # 「アイデアを教えて」と言う事なので違うのかな?
>>
>> アイデアと言うかヒントだけ。(すみません・・・)
>> ob_start()関数を使うか、、
>> http://sunset.freespace.jp/smarty/SmartyManual_2-6-2J_html/plugins.outputfilters.html
>> のプラグインを作成して、その中で置換する方法が手っ取り早い感じがします。
>> 私は、プラグインを作って対応した記憶があります。
>>
>> 汎用的な関数、がご希望ならプラグインがいいかもしれませんね。
>>
>> 詳細はマニュアルに例も載ってますのでご確認下さい。
>> http://www.php.net/ob_start
>> http://sunset.freespace.jp/smarty/SmartyManual_2-6-2J_html/plugins.outputfilters.html
>> _______________________________________________
>> PHP-users mailing list PHP-users @ php.gr.jp
>> http://ml.php.gr.jp/mailman/listinfo/php-users
>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>> http://www.php.gr.jp/php/novice.php3
>>
>>
>>
>>
>>
>
>
> _______________________________________________
> PHP-users mailing list PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>
>
--
☆■▽〜☆■▽〜☆■▽〜☆■▽〜☆■▽〜
江 頭 竜 二
〒840-0123 福岡市城南区長尾3-9-5
TEL 090-2586-8452
Email ryu-ring.woo @ cap.ocn.ne.jp
☆■▽〜☆■▽〜☆■▽〜☆■▽〜☆■▽〜
PHP-users メーリングリストの案内