使用下面的代码,一些表情符号将无效(文本不会被笑脸取代)。当我更改$ smileys数组的顺序时,破碎的表情符号会起作用,但其他人则不会。
所以我知道$ smileys数组的顺序决定了表情符号的替换,但我不知道为什么。
有人可以帮助我让所有的笑脸都能正常工作吗?感谢
public $smileys = array(
'tongetje.gif' => array(':p',':P'),
'cool.gif' => array(':8'),
'dansen.gif'=> array('(dance)'),
'mondje_dicht.gif' => array(':|'),
'muur_hoofd.gif' => array('|:('),
'huilen.gif' => array('(h)'),
'loser.gif' => array('(:)'),
'lachje.gif' => array(':)',':-)'),
'wink.gif' => array(';)'),
'lach.gif' => array(':d',':-D'),
'lollol.gif' => array(':#'),
'bloos.gif' => array('(b)'),
'stom.gif' => array(':s'),
'doei.gif' => array('(d)'),
'engeltje.gif' => array('O-)'),
'boze_smiley.gif' => array(':('),
'1april.gif' => array(':1)'),
'koning.gif' => array('(koning)'),
'offtopic.gif' => array('*-*'),
'opgeven_verlegen.gif' => array('O+'),
'piraat.gif' => array(':F'),
'politie.gif' => array('(p)'),
'reggae.gif' => array('(r)'),
'jammie.gif' => array(':9'),
'schamen.gif' => array(':-8'),
'verliefd.gif' => array(':00'),
'middelvinger.gif' => array(':--')
);
private function ubb_smileys($string) {
$counter = 1;
foreach($this->smileys as $imagename => $imagetags) {
if(is_numeric($this->smilies_enable)) {
if($counter <= $this->smilies_enable) {
foreach($imagetags as $int => $tag) {
$tag = str_replace("\\", "", $tag);
$src = UBB_SMILEYS_PATH.$imagename;
$image = UBB_SMILEYS_STRING;
$image = str_replace('${TAG}', $tag, $image);
$image = str_replace('${SRC}', $src, $image);
$string = str_replace($tag, $image, $string);
}
}
} else {
foreach($imagetags as $int => $tag) {
$tag = str_replace("\\", "", $tag);
$src = UBB_SMILEYS_PATH.$imagename;
$image = UBB_SMILEYS_STRING;
$image = str_replace('${TAG}', $tag, $image);
$image = str_replace('${SRC}', $src, $image);
$string = str_replace($tag, $image, $string);
}
}
$counter++;
}
return $string;
}
答案 0 :(得分:0)
我希望这是因为一些表情符号是其他人的子集。例如':)'是'(:)'的子集。所以,如果它出现在':)'之前,'(:)'将永远不会被找到。
首先包括最复杂的笑脸,然后任何笑脸都是另一个笑脸的子集必须晚一点。
这解释了为什么订购会影响您的结果。
那就是说 - 我找不到你在上面发布的顺序中订购的具体例子(虽然我可能没有找到足够长的时间)。根据上面发布的订单,哪些表情不适合你?
编辑:
我用下面的测试。对我来说很好。你用什么作为测试字符串?
define('UBB_SMILEYS_PATH', '/images/');
define('UBB_SMILEYS_STRING', '<img src="${SRC}" alt="${TAG}" />');
class UBB {
public $smileys_enable;
public function __construct() {
$this->smilies_enable = 100;
}
public $smileys = array(
'tongetje.gif' => array(':p',':P'),
'cool.gif' => array(':8'),
'dansen.gif'=> array('(dance)'),
'mondje_dicht.gif' => array(':|'),
'muur_hoofd.gif' => array('|:('),
'huilen.gif' => array('(h)'),
'loser.gif' => array('(:)'),
'lachje.gif' => array(':)',':-)'),
'wink.gif' => array(';)'),
'lach.gif' => array(':d',':-D'),
'lollol.gif' => array(':#'),
'bloos.gif' => array('(b)'),
'stom.gif' => array(':s'),
'doei.gif' => array('(d)'),
'engeltje.gif' => array('O-)'),
'boze_smiley.gif' => array(':('),
'1april.gif' => array(':1)'),
'koning.gif' => array('(koning)'),
'offtopic.gif' => array('*-*'),
'opgeven_verlegen.gif' => array('O+'),
'piraat.gif' => array(':F'),
'politie.gif' => array('(p)'),
'reggae.gif' => array('(r)'),
'jammie.gif' => array(':9'),
'schamen.gif' => array(':-8'),
'verliefd.gif' => array(':00'),
'middelvinger.gif' => array(':--')
);
private function ubb_smileys($string) {
$counter = 1;
foreach($this->smileys as $imagename => $imagetags) {
if(is_numeric($this->smilies_enable)) {
if($counter <= $this->smilies_enable) {
foreach($imagetags as $int => $tag) {
$tag = str_replace("\\", "", $tag);
$src = UBB_SMILEYS_PATH.$imagename;
$image = UBB_SMILEYS_STRING;
$image = str_replace('${TAG}', $tag, $image);
$image = str_replace('${SRC}', $src, $image);
$string = str_replace($tag, $image, $string);
}
}
} else {
foreach($imagetags as $int => $tag) {
$tag = str_replace("\\", "", $tag);
$src = UBB_SMILEYS_PATH.$imagename;
$image = UBB_SMILEYS_STRING;
$image = str_replace('${TAG}', $tag, $image);
$image = str_replace('${SRC}', $src, $image);
$string = str_replace($tag, $image, $string);
}
}
$counter++;
}
return $string;
}
public function parse_smileys($str) {
return $this->ubb_smileys($str);
}
}
$ubb = new UBB();
$myStr = 'xxx :-) :s lalala (d) :( Some text';
echo($ubb->parse_smileys($myStr));
答案 1 :(得分:0)
我认为当您成功更换时,您需要将foreach循环短路。这就是我测试它所做的,作为一个完整的文件:
<pre>
<?php
define('UBB_SMILEYS_PATH', 'c:\\');
define('UBB_SMILEYS_STRING', '(img src="${SRC}" alt="${TAG}" /)');
class ubb {
var $smilies_enable = true;
public $smileys = array(
'tongetje.gif' => array(':p',':P'),
'cool.gif' => array(':8'),
'dansen.gif'=> array('(dance)'),
'mondje_dicht.gif' => array(':|'),
'muur_hoofd.gif' => array('|:('),
'huilen.gif' => array('(h)'),
'loser.gif' => array('(:)'),
'lachje.gif' => array(':)',':-)'),
'wink.gif' => array(';)'),
'lach.gif' => array(':d',':-D'),
'lollol.gif' => array(':#'),
'bloos.gif' => array('(b)'),
'stom.gif' => array(':s'),
'doei.gif' => array('(d)'),
'engeltje.gif' => array('O-)'),
'boze_smiley.gif' => array(':('),
'1april.gif' => array(':1)'),
'koning.gif' => array('(koning)'),
'offtopic.gif' => array('*-*'),
'opgeven_verlegen.gif' => array('O+'),
'piraat.gif' => array(':F'),
'politie.gif' => array('(p)'),
'reggae.gif' => array('(r)'),
'jammie.gif' => array(':9'),
'schamen.gif' => array(':-8'),
'verliefd.gif' => array(':00'),
'middelvinger.gif' => array(':--')
);
public function ubb_smileys($string) {
$counter = 0;
foreach($this->smileys as $imagename => $imagetags) {
$f = false;
if(is_numeric($this->smilies_enable)) {
if($counter <= $this->smilies_enable) {
foreach($imagetags as $int => $tag) {
$tag = str_replace("\\", "", $tag);
$src = UBB_SMILEYS_PATH.$imagename;
$image = UBB_SMILEYS_STRING;
$image = str_replace('${TAG}', $tag, $image);
$image = str_replace('${SRC}', $src, $image);
if(strstr($string, $tag)) {
$string = str_replace($tag, $image, $string);
$f = true;
break;
}
}
}
} else {
foreach($imagetags as $int => $tag) {
$tag = str_replace("\\", "", $tag);
$src = UBB_SMILEYS_PATH.$imagename;
$image = UBB_SMILEYS_STRING;
$image = str_replace('${TAG}', $tag, $image);
$image = str_replace('${SRC}', $src, $image);
if(strstr($string, $tag)) {
$string = str_replace($tag, $image, $string);
$f = true;
break;
}
}
}
$counter++;
if($f) break;
}
return $string;
}
}
$ubb = new ubb();
foreach($ubb->smileys as $s) {
foreach($s as $ss) {
$phr = "lol $ss";
echo $phr . " -> " .($ubb->ubb_smileys($phr));
echo "<br/>";
}
}