PHP在文件中找到半个未知的字符串

时间:2014-05-19 18:43:28

标签: php

我正在编写一些代码,但是我想要实现除数据库之外的语言系统(可能稍后集成)。 目前我在我的语言课中有这些代码行:

final public function findTexts()
{
    global $engine;
    $file = file_get_contents('./styles/'.$engine->getStyle().''.$engine->getPage());
    if(strpos($file, '%%'))
    {
        echo "String found";
    }
}

让我告诉你我的其他功能:

final public function getText($text)
{
    global $engine, $LANG;
    $text = str_ireplace($text, $LANG[substr($text, 2, -2)], $text);
    echo $text;
}

我想要做的是检查字符串的文件(在样式文件夹中)(例如%% Hi %%)。在我的语言文件中,我说Hi == Hello,所以当我执行getText函数时,它会说'Hello'。但是,我想让它变得简单,所以你只需要在文件中键入%% Hi %%,语言类将自动检查包含%%的所有字符串,最后是%%,并将替换%%和%%中的字符串,语言文件中包含给定的字符串。

希望这是足够的信息...

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用正则表达式和preg_replace_callback来完成此操作。请参阅下面的示例:

<?php
final public function findTexts()
{
    global $engine;
    $file = file_get_contents('./styles/'.$engine->getStyle().''.$engine->getPage());
    $language = $this;
    $file = preg_replace_callback('/(%%([^%]+)%%)/',function($matches) use ($language){
        $word = $matches[2];
        return $language->getText($word);
    },$file);
}

如果您有大量文件或大量替换,此方法可能会变得非常慢。如果你在做一个非常小的个人网站,那就太棒了。如果您正在做一些更大的事情,我强烈建议缓存结果,这样您就不必为每个请求和文件重新计算它。