1

単純なことのように聞こえるが、今日はかなり愚かな気分だ。

次のような配列がある場合:

$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 値を置き換えるためにこれが必要です。これは、同じ出力が複数回必要になる可能性があるためです。たとえば、{POST_TITLE}が 2 回定義されている場合、文字列内で使用された場所に正確に値を 2 回出力する必要があります。

ありがとう

4

4 に答える 4

4

str_replaceは配列をサポートします。次の構文がそれを行います。

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

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

于 2012-04-27T05:31:54.700 に答える
3
foreach($defined_vars as $key=>$value) {
  $string = str_replace($key,$value,$string);
}

これはあなたが尋ねたようにstr_replaceを使用しており、何が起こっているかを簡単に確認できます。Phpにはstrtrまたはstringtranslate関数もあり、これをほぼ実行できるため、次を使用することもできます。

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

しかし、その機能が何をするかを覚えておく必要があります。

于 2012-04-27T05:25:17.060 に答える
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を除外して、Cookieが盗まれたり、管理者または他のユーザーとしてログインしたりしないようにしてください。

于 2012-04-27T05:23:02.663 に答える
0

はい、str_replaceは適切です。foreach()で配列をループするだけです。

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

HTMLが壊れないように、変数にいくつかのフィルターを適用することをお勧めします。

于 2012-04-27T05:24:45.983 に答える