2012-04-27 10 views
1

私は今はかなり愚かな気がしています。このようなPHP配列の値をHTML文字列に置き換えてください

$defined_vars = array(
    '{POST_TITLE}' => $item['post']['name'], 
    '{POST_LINK}' => $item['post']['link'], 
    '{TOPIC_TITLE}' => $item['topic']['name'], 
    '{TOPIC_LINK}' => $item['topic']['link'], 
    '{MEMBERNAME}' => $txt['by'] . ' <strong>' . $item['membername'] . '</strong>', 
    '{POST_TIME}' => $item['time'], 
    '{VIEWS}' => $txt['attach_viewed'] . ' ' . $item['file']['downloads'] . ' ' . $txt['attach_times'], 
    '{FILENAME}' => $item['file']['name'], 
    '{FILENAME_LINK}' => '<a href="' . $item['file']['href'] . '">' . $item['file']['name'] . '</a>', 
    '{FILESIZE}' => $item['file']['size'], 
    '{DIMENSIONS}' => $item['file']['image']['width'] 'x' $item['file']['image']['height'], 
); 

と文字列:私はこのような配列がある場合

$string = '<div class="largetext centertext">{POST_LINK}</div><div class="smalltext centertext">{MEMBERNAME}</div><div class="floatright smalltext dp_paddingright">{POST_TIME}</div><div class="dp_paddingleft smalltext">{VIEWS}</div>'; 

を、私はそれは、これらのキーの値と交換する必要があります。それは可能ですか?たぶんstr_replace()を使用していますか?配列キーに中カッコを入れることができますか?それは何か問題を引き起こすだろうか?また、これらの文字列が見つかったときに$ stringの値を置き換えるには、これを必要とします。同じ出力が1回以上必要な場合があります。たとえば、{POST_TITLE}が2回定義されている場合は、文字列内で正確に2回出力されるはずです。うまく

おかげ

答えて

2
foreach($defined_vars as $key=>$value) { 
    $string = str_replace($key,$value,$string); 
} 

これはstr_replaceを使用しているため、何が起きているのか分かりやすいです。 PHPはまたstrtrまたは文字列あなたも

$string = strtr($string,$defined_vars); 

を使用することができますが、その関数が何をするかを覚えておく必要がありますので、かなりちょうどこれを行うために機能を翻訳しています。

+0

なぜdownvote?これは動作する最も簡単な方法です – hackartist

+0

明らかに最も単純ではない –

+1

PHPゴルフのファンシーゲームですか? – Scuzzy

0
<div class="largetext centertext"> 
    <a href="<?=$item['post']['link']?>"><?=$item['post']['title']?></a> 
</div> 
<div class="smalltext centertext"> 
    <?=$txt['by']?><strong><?$item['membername']?></strong> 
</div> 
<div class="floatright smalltext dp_paddingright"><?$item['time']?></div> 
<div class="dp_paddingleft smalltext"> 
    <?=$txt['attach_viewed']?> 
    <?=$item['file']['downloads']?> 
    <?=$txt['attach_times']?> 
</div> 

、それはユーザー定義の文字列だ場合、あなたは

$string = strtr($string,$defined_vars); 

を交換する必要がまた、私はからそれらを防ぐために、あなたはユーザが編集HTMLをフィルタリングを願ってあなたのクッキーを盗んで、管理者または他のユーザーとしてログインしてください。

+0

?私は文字列内の '{POST_TIME}'を '$ defined_vars ['{POST_TIME}'];と置き換える必要があります。これはユーザ定義の文字列なので、 '$ defined_vars'キーのいずれかを保持できます。 HTMLは、ユーザーがテキストボックスを介していつでも変更することができます... – SoLoGHoST

+1

樹皮をする必要はありません。丁寧な説明で十分でしょう。そのような限定されたケースのためにここに別の解決策があります –

0

うん、あなたstr_replaceはあなたがあなたのHTMLが難破持っていないことを確認するためにあなたの変数にいくつかのフィルタを適用したい場合があり、適切な、ただのforeach()ループあなたの配列

if(isset($defined_vars) and is_array($defined_vars)) 
{ 
    foreach($defined_vars as $token => $replacement) 
    { 
    $string = str_replace($token,$replacement,$string); 
    } 
} 

です。

+0

HTMLが壊れていないことを保証するために変数にフィルターをかけてどういう意味ですか?そしてありがとうbtw :) – SoLoGHoST

+0

なぜあなたはすべての答えをdownvotingですか? – Jack

+0

@SoLoGHoSTたとえば、きれいな出力を確保するためにhtmlをエスケープする必要がある場合、またはそれを前もって行ったことがありますか? – Scuzzy

4

str_replaceアレイをサポートします。次の構文でそれを行います。

$string=str_replace(array_keys($defined_vars), array_values($defined_vars), $string); 

中カッコは配列キーでサポートされています。これは文字列内にあり、文字列は配列yesとしてサポートされているためです。

+0

非常に良い応答。 – DanRedux

+0

+1私はいつもこのようにarray_keys/array_valuesを使うことを忘れています – Scuzzy

+0

@Scuzzyも私に起こります:-) –

関連する問題