我要创建自己的简码

在文本中,我可以输入简码,例如:



在此表达式中,您可以看到进入[]标记的短代码,我想显示没有此短代码的文本,并将其替换为gallery(使用php include并从shortcode中读取路径gallery)

我认为可以使用这种方法,就像您看到的那样,但是它们都不对我有用,但是这里的人可以告诉我一些事情或者给我任何可以帮助我的想法

 <?php
 $art_sh_exp=explode("][",html_entity_decode($articulos[descripcion],ENT_QUOTES));

 for ($i=0;$i<count($art_sh_exp);$i++) {

 $a=array("[","]"); $b=array("","");

 $exp=explode("~",str_replace ($a,$b,$art_sh_exp[$i]));


 for ($x=0;$x<count($exp);$x++) { print
 "".$exp[1]."-".$exp[2]."-".$exp[3]."-<br>"; }

 } ?>

谢谢

最佳答案

我建议您使用正则表达式查找所有出现的短码模式。

它使用preg_match_all(文档here)查找所有出现的内容,然后使用简单的str_replace(文档here)将转换后的简码放回字符串中

此代码中包含的正则表达式只是尝试将0匹配到括号[]之间的字符的无限制出现

$string = "The people are very nice , [gal~route~100~100] , the people are very nice , [ga2l~route2~150~150]";
$regex = "/\[(.*?)\]/";
preg_match_all($regex, $string, $matches);

for($i = 0; $i < count($matches[1]); $i++)
{
    $match = $matches[1][$i];
    $array = explode('~', $match);
    $newValue = $array[0] . " - " . $array[1] . " - " . $array[2] . " - " . $array[3];
    $string = str_replace($matches[0][$i], $newValue, $string);
}

结果字符串现在是
The people are very nice , gal - route - 100 - 100 , the people are very nice , ga2l - route2 - 150 - 150

通过分两个阶段解决问题
  • 查找所有出现的位置
  • 用新值替换它们

  • 开发和调试更简单。如果您想一次更改您的简码转换为URL或其他方式的方式,这也使操作变得更加容易。

    编辑: jack (Jack)建议的,使用preg_replace_callback可以使操作更简单。看到他的答案。

    关于php - 用php创建我自己的简码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13577206/

    10-09 19:58