Place the `@charset` at the very beginning of the generated CSS (#3726)
authorAlexander Ebert <ebert@woltlab.com>
Tue, 17 Nov 2020 14:17:49 +0000 (15:17 +0100)
committerGitHub <noreply@github.com>
Tue, 17 Nov 2020 14:17:49 +0000 (15:17 +0100)
* Place the `@charset` at the very beginning of the generated CSS

* Apply suggestions from code review

Co-authored-by: Tim Düsterhus <duesterhus@woltlab.com>
Co-authored-by: Tim Düsterhus <duesterhus@woltlab.com>
wcfsetup/install/files/lib/system/style/StyleCompiler.class.php

index 947bb2630459cabf65b7b56b5bb3bce221665178..b11be612789cc398e8f3d4789dc3cc7d44383a15 100644 (file)
@@ -153,7 +153,8 @@ class StyleCompiler extends SingletonFactory {
                                $variables,
                                $individualScss . (!empty($parameters['scss']) ? "\n" . $parameters['scss'] : ''),
                                function($content) use ($styleName) {
-                                       return "/* stylesheet for '". $styleName ."', generated on ".gmdate('r')." -- DO NOT EDIT */\n\n" . $content;
+                                       $header = "/* stylesheet for '".$styleName."', generated on ".gmdate('r')." -- DO NOT EDIT */";
+                                       return '@charset "UTF-8";' . "\n\n{$header}\n\n" . preg_replace('~^@charset "UTF-8";\r?\n~', '', $content);
                                }
                        );
                }
@@ -250,7 +251,8 @@ class StyleCompiler extends SingletonFactory {
                        $variables,
                        $individualScss . (!empty($parameters['scss']) ? "\n" . $parameters['scss'] : ''),
                        function($content) use ($style) {
-                               return "/* stylesheet for '".$style->styleName."', generated on ".gmdate('r')." -- DO NOT EDIT */\n\n" . $content;
+                               $header = "/* stylesheet for '".$style->styleName."', generated on ".gmdate('r')." -- DO NOT EDIT */";
+                               return '@charset "UTF-8";' . "\n\n{$header}\n\n" . preg_replace('~^@charset "UTF-8";\r?\n~', '', $content);
                        }
                );
        }
@@ -305,7 +307,8 @@ class StyleCompiler extends SingletonFactory {
                                $content = str_replace('../icon/', '../../icon/', $content);
                                $content = preg_replace('~\.\./images/~', '../../images/', $content);
                                
-                               return "/* stylesheet for ACP, generated on ".gmdate('r')." -- DO NOT EDIT */\n\n" . $content;
+                               $header = "/* stylesheet for the admin panel, generated on ".gmdate('r')." -- DO NOT EDIT */";
+                               return '@charset "UTF-8";' . "\n\n{$header}\n\n" . preg_replace('~^@charset "UTF-8";\r?\n~', '', $content);
                        }
                );
        }