0

我有一个未通过验证的对比度切换器。我已阅读脚本标记中何时需要 CDATA 部分? 并尝试转义字符并使用 CDATA 但我仍然收到两者的验证错误。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<head>
<script type="text/javascript">
    $(document).ready(function(){
    // DRY wrapper function
    function appendStyleSheet() {
      $('head').append('<link rel="stylesheet" href="{site_url}css/high-contrast.css" type="text/css" id="hc_stylesheet"/>'); 
    }
    // append the style sheet on load if the cookie is set to true
    if ($.cookie('high_contrast_momentum') == 'true') {
      appendStyleSheet();      
    }
    $("#contrast-btn a").click(function () {
        if ($.cookie('high_contrast_momentum') != 'true') {

            appendStyleSheet();      
            $.cookie('high_contrast_momentum', 'true', {expires:365}); // set the cookie to true
        }       
        else {
            // remove the high-contrast style
            $("#hc_stylesheet").remove();
            $.cookie('high_contrast_momentum', 'false');
        }
    });
    });
</script>   

我得到的验证错误是:文档类型不允许元素“链接”在这里


Powershell 正则表达式组替换

我想替换文件夹中每个脚本文件中的一些文本,我正在尝试使用这个 PS 代码:

$pattern = '(FROM [a-zA-Z0-9_.]{1,100})(?<replacement_place>[a-zA-Z0-9_.]{1,7})'
Get-ChildItem -Path 'D:\Scripts' -Recurse -Include *.sql | ForEach-Object { (Get-Content $_.fullname) -replace $pattern, 'replace text' | Set-Content $_.fullname }

但我不知道如何保留表达的第一部分,而只是替换第二部分。知道我该怎么做吗?谢谢。

4

1 回答 1

0

您可以在 <head> 标签内使用 <link /> 标签,但不允许在 <script> 标签内使用 <link /> 标签。

另一方面,在 <script> 标签中存在 <link /> 标签是一种简单的误解。xHTML 文档(因为您使用的是 xHTML DTD)确实包含 CDATA 部分,以确保脚本区域的内容不会被解析为 xHTML。

您的错误是由使用 xHTML 保留字符 &/</> 引起的。

验证引擎可能错误地读取了脚本标签内的链接,即使这些脚本标签的内容不应被解析为 HTML。

尝试将较低的符号与字符串的其余部分分开,如下所示:

 $('head').append('<'+'link rel="stylesheet" href="{site_url}css/high-contrast.css" type="text/css" id="hc_stylesheet"/'+'>'); 
于 2012-08-03T11:04:06.843 回答