【问题标题】:Replacing a CSS class using PHP?使用 PHP 替换 CSS 类?
【发布时间】:2013-07-24 02:52:39
【问题描述】:

我正在构建 Web 应用程序的后端,可以在其中更改页面的设计。一旦用户按照他们喜欢的方式设置了设计,他们应该能够保存它并且新设计将被写入特定文件。

因此,我需要在某个字符串之后替换{} 之间的所有字符,这将是类的名称。

这是一个非常简单的概念,假设下面的类在一个单独的文件中,我将其作为视图加载,style.php。我需要从:

来自

<style>
.bonus {
    bottom: 6px;
    left: 247px;
}
</style>

<style>
.bonus {
    bottom: 20px;
    left: 450px;
}
</style>

有人可以推荐我最好的方法

a) 在文件中查找字符串,

b) 找到后,在第一个字符串之后替换两个字符串之间的所有内容。

谢谢。

【问题讨论】:

  • 我不会进行查找和替换,我会让您的后端生成一个新的 CSS 样式表,该样式表在您的主样式表之后调用。
  • 实际上,这听起来是一个更好的主意。但只是为了知道我会留下这个问题。
  • 你可以使用PHP CSS Parser,操作它给出的结构,然后在你修改后输出一个新的CSS文件。
  • 您还可以查看服务器端 CSS 语言,如 LESS 和 SCSS,您可以将变化的部分作为变量。两者的 PHP 版本都可以在这里找到:lessphpscssphp(可能还有其他 PHP 实现,我不确定)。

标签: php css regex


【解决方案1】:

我非常不喜欢用户对实际文件进行更改的概念。用户可以通过许多更安全的方法创建和维护自定义模板,而无需实际更改 PHP 文件。

如果将用户的 CSS 存储在数据库的某个字段中呢?然后您只需要执行以下操作:

<?php

     $css = getCSSByUserId($userId); //function runs query on DB to get user-specific CSS

/* $css = ".bonus {
    bottom: 20px;
    left: 450px;
}" */

?>
<style>
     <?php echo $css; ?>
</style>

【讨论】:

  • 那么在这种情况下,唯一可以进行更改的用户将是管理员,所以我相信它是允许的。
【解决方案2】:

如果你真的想编辑实际的文件,你可以这样做:

<?

$file = "/path/to/file.php";

//The user's replacement CSS
 $replace = '.bonus {
    bottom: 20px;
    left: 450px;
}';

$str = file_get_contents($file);

$str = preg_replace('/\.bonus \{.*\}/U', $replace, $str);

$res = fopen($file, 'w');
fwrite($res, $str);
fclose($res);

?>

我在这里检查了正则表达式 http://www.quanetic.com/Regex 并且它有效。

【讨论】:

  • @styke 你试过这个吗?如果它有效,我不会介意代表。
猜你喜欢
  • 2019-06-22
  • 1970-01-01
  • 2011-06-04
  • 2022-06-14
  • 1970-01-01
  • 2014-10-08
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多