循环中的PHP str_replace()只替换一项


PHP str_replace() in loop only replaces one item

我正在尝试用php函数解析一个字符串,它将为bbcode样式:smiley:string返回一个<img>标记。

它只解析找到的第一个项,然后停止循环。我需要它来解析整个文本,然后返回。

我尝试了以下方法:

function parse_emoji($string){
$possibleCodes = array('+1','-1','angry','anguished','astonished','bawling','bleep_bloop','blush','cold_swaet','confounded','confused','cookie','cry','dissapointed','dissapointed_relieved','dizzy','expressionless','fearfull','flushed','frown','grey_question','grimace','grin','heart','heartbreak','hushed','innocent','joy','kiss','kissing_blush','kissing_closed_eyes','kissing_smiling_eyes','kissing_wink','lol','love','love','mask','mrgreen','naughty','neutral','no_mouth','open_mouth','pensive','persevere','rage','relaxed','relieved','scream','skull','sleeping','sleepy','smile','smiley','smirk','star','tongue_grin','tongue_wink','triumph','trollface','unamused','warning','weary','wink','worried','yum');
foreach($possibleCodes as $code) {
  return str_replace(':'.$code.':', "<img class='smiley' src='".asset_url()."img/emoticons/".$code.".png'>", $string);
}

}

如果我解析$string("这是一个smiley:smile:还有这个:smile:"),它会为第一个标签插入一个图像,但会为第二个标签回显平原:smiley:。

这是因为您在foreach中返回了一个结果。它将停止循环,并在只出现一次循环后返回结果。

您应该删除foreach语句中的返回:

function parse_emoji($string){
    $possibleCodes = array(...);
    foreach($possibleCodes as $code) {
      $string = str_replace(':'.$code.':', "<img class='smiley' src='".asset_url()."img/emoticons/".$code.".png'>", $string);
    }
    return $string;
}

因为您在第一次替换后返回。。。。循环所有单个替换,然后才返回

function parse_emoji($string){
    $possibleCodes = array('+1','-1','angry','anguished','astonished','bawling','bleep_bloop','blush','cold_swaet','confounded','confused','cookie','cry','dissapointed','dissapointed_relieved','dizzy','expressionless','fearfull','flushed','frown','grey_question','grimace','grin','heart','heartbreak','hushed','innocent','joy','kiss','kissing_blush','kissing_closed_eyes','kissing_smiling_eyes','kissing_wink','lol','love','love','mask','mrgreen','naughty','neutral','no_mouth','open_mouth','pensive','persevere','rage','relaxed','relieved','scream','skull','sleeping','sleepy','smile','smiley','smirk','star','tongue_grin','tongue_wink','triumph','trollface','unamused','warning','weary','wink','worried','yum');
    foreach($possibleCodes as $code) {
        $string = str_replace(':'.$code.':', "<img class='smiley' src='".asset_url()."img/emoticons/".$code.".png'>", $string);
    }
    return $string;
}