首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是替换标记的最佳/适当方式吗?

这是替换标记的最佳/适当方式吗?
EN

Stack Overflow用户
提问于 2010-11-09 19:14:53
回答 2查看 75关注 0票数 0

在我的文本中,用户可以输入这样的模块:[[form:contact]],表示模块及其名称;[[module:name]

我使用下面的代码从文本中收回它,并将其拆分,从数据库中获取我想要的信息并替换它。

这是最好的方法吗?它工作得很好,但我不确定这是不是最有效的方法,我想知道你们会怎么想……

我正在使用Zend框架。

代码如下:

代码语言:javascript
复制
$start = strpos($this->view->page->text, "[[");
$end = strpos($this->view->page->text, "]]");
$length = $end-$start+2;

$getModuleTag = substr($this->view->page->text, $start, $length);
$length = $end-$start-2;
$removeTags = substr($getModuleTag, 2, $length);

$split = strpos($removeTags, ":");

$GetModuleSort = substr($removeTags, 0, $split);
$GetModuleName = substr($removeTags, $split+1);

// Get the wanted data from the database
switch($GetModuleSort)
{
    case 'form':
        $this->result = $this->formsService->GetFormByName($GetModuleName);
        $replaceTag = $this->result->elements;
    break;
}

// TEST OUTPUT
$final = str_replace($getModuleTag, $replaceTag, $this->view->page->text);
$this->view->finalOutput = $final;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-09 19:18:55

是的,这是一个很好的方法。

票数 0
EN

Stack Overflow用户

发布于 2010-11-09 19:34:30

您可以使用正则表达式-取决于您的需要:

代码语言:javascript
复制
$pattern="/\[\[(.*?)\]\]/";
$string="some string with a [[module]] in it, and [[another]] here";
$match=preg_match_all($pattern, $string, $matches);
print_r($matches);

会给出一个包含所有模块/标识符的数组:

代码语言:javascript
复制
Array ( [0] => Array ( [0] => [[module]] [1] => [[another]] ) [1] => Array ( [0] => module [1] => another ) ) 

第一个孩子将摘录作为数组孩子和括号(如果需要)包含在一起,第二个孩子包含内容的数组……

这将适用于您想要的任意数量的引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4132991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档