我正在尝试用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;
}