条件sprintf codeigniter php

时间:2013-03-05 10:07:11

标签: php xml codeigniter printf

我们正在基于相同的codeigniter代码库创建2个应用程序。这两个应用程序都使用基于语言的XML文件(我们不能使用本机CI lang lib),因此每个应用程序每种语言都有一个XML文件。

在这些XML文件中,文本根据您正在查看的应用程序在输出时的格式不同。 (我们使用简单的XML加载XML,然后按名称输出所需的元素)

app 1的示例XML摘录可能是:

<instructions>
    <instruction>**<strong>**Lorem ipsum dolor sit**</strong>** amet, consectetur adipisicing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua</instruction>
</instructions>

示例app 2提取可能是:

<instructions>
    <instruction>Lorem ipsum dolor sitamet, consectetur adipisicing elit, sed doeiusmod tempor incididunt ut labore et **<br /><br />**dolore magna aliqua</instruction>
</instructions>

基本上,这些XML文件需要包含不同的标记,以便在PHP中输出时对其进行格式化。上面的两个示例都将作为$ app-&gt; instructions-&gt;指令回显。

目前,我已经使用CDATA占位符实现了格式化的变化,然后我进行了sprintf和替换。然而,在我看来,在sprintf函数中需要多个参数来替换可能是大量标记元素的内容,这是不够灵活的。到目前为止,我需要更换的最多是6个CDATA令牌。

复合这个事实我还必须根据正在加载的应用程序使sprintf条件化。更糟糕的是,我选择在控制器中执行此操作,以便不使用不必要的PHP污染HTML。

为了追求追求我想要实现的目标如下:

  • XML不受HTML标记的影响
  • HTML保持清晰,或至少最小化PHP的使用
  • 控制器内绝对没有HTML

似乎我正在试图破坏其中一种,我尝试使用它。

1 个答案:

答案 0 :(得分:0)

你的问题很难回答,但无论如何我都会尝试。你提出了三个要求:

  1. XML不受HTML标记的影响
  2. HTML保持清晰,或至少最小化PHP的使用
  3. 控制器内绝对没有HTML
  4. 为了使XML不受HTML标记的影响,请不要在其中放置任何HTML标记。或者如果你想在那里有HTML,请正确编码。与CDATA或XML实体一样:

    <instructions>
      <instruction>
        &lt;strong&gt;Lorem ipsum dolor sit&lt;/strong&gt; amet, consectetur 
        adipisicing elit, sed doeiusmod tempor incididunt ut labore et dolore magna
        aliqua
      </instruction>
    </instructions>
    

    XML完全没有问题,你也不应该有任何问题来获取该值。因此,1。)。

    对于2.)我不明白你的意思。如果你想要清除PHP,不要在里面放任何PHP。如果你把PHP放在里面,你需要知道你需要对它进行编码(比如HTML),否则你会创建所谓的处理指令(pi),这本身可能不是任何问题,但是在获取数据时你可能会遇到问题。但无论如何,由于这些翻译是静态数据,所以不管怎么说都不应该放任何PHP。

    处理静态数据的逻辑很可能属于视图和/或控制器。

    对于3.)只是不要在控制器中放置任何HTML,你应该没问题(把它放在Codeigniter人调用的视图中,这是Codeigniter中HTML模板的组件)。