html中常用的标签代码容易记混淆怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了html中常用的标签代码容易记混淆怎么办?相关的知识,希望对你有一定的参考价值。

比如有些东西 <br />中的斜杠是在后面的,而有的斜杠则是在前边的,例如<a href="http://www.baidu.com">百度</a>还有<head>内容</head> <title>内容</title> ..等等

好多记得我都乱了,请问有什么记忆的诀窍么?或是常用的给我一点,我好死记住啊

在原来的html斜都是用于尾标签加在前面的,比如</a> </html>等 作为结尾的标志符而已
但是随着HTML语言的不断发展,出现了很多的不同的使用习惯,导致了浏览器为了识别每个程序员不同的习惯而用了大量的时间,所以HTML书写代码的规范性逐渐严格起来
你说的<br />就是现在民间4.5版本书写规则(对官方运量中的5.0版本书写规则会有很大的指导作用)的一个例子。引用原文“
1.所有的标记都必须要有一个相应的结束标记
以前在HTML中,你可以打开许多标签,例如<p>和<li>而不一定写对应的</p>和</li>来关闭它们。但在XHTML中这是不合法的。XHTML要求有严谨的结构,所有标签必须关闭。如果是单独不成对的标签,在标签最后加一个"/"来关闭它。例如:
<br /><img height="80" alt="网页设计师" src="../images/logo_w3cn_200x80.gif" width="200" />


关于这一点的一个新书写规则就是为了让所有的HTML代码构成一个都有首位标签,所以让BR这样单独出现的标签在后面加上一个/,凡是单独出现的标签,/就是加在后面,成对出现的标签,都是加在尾标签前面
这样做的目的仅仅是为了规范性的要求而已
于此同类的,将来的属性规范定义函数比如第二个单词往后的首字母大写、其余小写;没有属性值的属性,将会书写为赋予它本身的属性比如<td nowrap="nowrap">

最后
如果你是想成为相关的从业人员,就应该养成一个良好的书写习惯
如果你只是一个HTML的爱好者或者零时的使用者,不用过分在意这样的书写规范,只需要是成对出现的尾标签上加/表示结束,目前来说它对代码的运行并没有任何影响
参考技术A 在html中 只有<br/> 的斜杠是在后面的 其他都是在前面的 很好记,标签一般都是成对出现的,只有特殊几个,特殊记就可以了。就好比 <img>标签 <img src="xxx.jpg" / > 在最后一个尖括号的前面打一个斜杠就可以,也可以不打。 <input>标签也没有结束标签。追问

好比 标签

哦能不能告诉我还有其他的呢?

参考技术B L></HTML> (放在档案的开头与结尾)
文件主题 <TITLE></TITLE> (必须放在「文头」区块内)
文头 <HEAD></HEAD> (描述性资料,像是「主题」)
文体 <BODY></BODY> (文件本体)
(由浏览器控制的显示风格)
标题 <H?></H?> (从1到6,有六层选择)
标题的对齐 <H? ALIGN=LEFT|CENTER|RIGHT></H?>
区分 <DIV></DIV>
区分的对齐 <DIV ALIGN=LEFT|RIGHT|CENTER|JUSTIFY></DIV>
引文区块 <BLOCKQUOTE></BLOCKQUOTE> (通常会内缩)
强调 <EM></EM> (通常会以斜体显示)
特别强调 <STRONG></STRONG> (通常会以加粗显示)
引文 <CITE></CITE> (通常会以斜体显示)
码 <CODE></CODE> (显示原始码之用)
样本 <SAMP></SAMP>
键盘输入 <KBD></KBD>
变数 <VAR></VAR>
定义 <DFN></DFN> (有些浏览器不提供)
地址 <ADDRESS></ADDRESS>
大字 <BIG></BIG>
小字 <SMALL></SMALL>
与外观相关的标签(作者自订的表现方式)
加粗 <B></B>
斜体 <I></I>
底线 <U></U> (尚有些浏览器不提供)
删除线 <S></S> (尚有些浏览器不提供)
下标 <SUB></SUB>
上标 <SUP></SUP>
打字机体 <TT></TT> (用单空格字型显示)
预定格式 <PRE></PRE> (保留文件中空格的大小)
预定格式的宽度 <PRE WIDTH=?></PRE>(以字元计算)
向中看齐 <CENTER></CENTER> (文字与图片都可以)
闪耀 <BLINK></BLINK> (有史以来最被嘲弄的标签)
字体大小 <FONT SIZE=?></FONT>(从1到7)
改变字体大小 <FONT SIZE=+|-?></FONT>
基本字体大小 <BASEFONT SIZE=?> (从1到7; 内定为3)
字体颜色 <FONT COLOR='#$$$$$$'></FONT>
2.连结与图形
连结 <A href='/URL'></A>
连结到锚点 <A HREF='URL#***'></A>(如果锚点在另一个档案)
<A HREF='#***'></A> (如果锚点目前的档案)
连结到目的视框 <A href='/URL' TARGET='***'></A>
设定锚点 <A NAME='***'></A>
图形 <IMG src='/URL'>
图形看齐方式 <IMG src='/URL' ALIGN=TOP|BOTTOM|MIDDLE>
图形看齐方式 <IMG src='/URL'
ALIGN=LEFT|RIGHT|TEXTTOP|ABSMIDDLE|BASELINE|ABSBOTTOM>
取代文字 <IMG src='/URL' ALT='***'> (如果没有办法显示图形则显示此文字)
点选图 <IMG src='/URL' ISMAP> (需要CGI程式)
N2.0 点选图 <IMG src='/URL' USEMAP='URL'>
N2.0 地图 <MAP NAME='***'></MAP>(描述地图)
N2.0 段落 <AREA SHAPE='RECT' COORDS=',,,' href='/URL'|NOHREF>
3.0 大小 <IMG src='/URL' WIDTH='?' HEIGHT='?'>(以pixels为单位) N1.0 图形边缘 <IMG src='/URL' BORDER=?> (以pixels为单位)
N1.0 图形边缘空间 <IMG src='/URL' HSPACE=? VSPACE=?> (以pixels为单位)
N1.0 低解析度图形 <IMG src='/URL' LOWsrc='/URL'>
N1.1 用户端拉 <META HTTP-EQUIV='Refresh' CONTENT='?; URL=URL'>(使用端自动更新 )
N2.0 内嵌物件 <EMBED src='/URL'> (将物件插入页面)
N2.0 内嵌物件大小 <EMBED src='/URL' WIDTH='?' HEIGHT='?'>
3.分隔
段落 <P> (通常是两个return)
3.0 段落 <P></P> (新定义成容器型标签)
3.0 文字看齐方式 <P ALIGN=LEFT|CENTER|RIGHT></P>
换行 <BR> (一个return)
N1.0 文字部份看齐方式<BR CLEAR=LEFT|RIGHT|ALL>(与图形合用时)
横线 <HR>
N1.0 横线对齐 <HR ALIGN=LEFT|RIGHT|CENTER>
N1.0 横线厚度 <HR SIZE=?> (以pixels为单位)
N1.0 横线宽度 <HR WIDTH=?> (以pixels为单位)
N1.0 横线比率宽度 <HR WIDTH=%> (以页宽为100%)
N1.0 实线 <HR NOSHADE> (没有立体效果)
N1.0 不可换行 <NOBR></NOBR> (不换行)
N1.0 可换行处 <WBR> (如果需要,可在此断行)
列举 (可以巢状列举)
无次序式列举 <UL><LI></UL> (<LI> 放在每一项前)
N1.0 公布式列举 <UL TYPE=DISC|CIRCLE|SQUARE>(定义全部的列举项)
<LI TYPE=DISC|CIRCLE|SQUARE>(定义这个及其后的列举项)
有次序式列举 <OL><LI></OL> (<LI> 放在每一项前)
N1.0 数标型态 <OL TYPE=A|a|I|i|1> (定义全部的列举项)
<LI TYPE=A|a|I|i|1> (定义这个及其后的列举项)
N1.0 起始数字 <OL value=?> (定义全部的列举项)
<LI value=?> (定义这个及其后的列举项)
定义式列举 <DL><DT><DD></DL>(<DT>项目, <DD>定义)
表单式列举 <MENU><LI></MENU>(<LI> 放在每一项前)
目录式列举 <DIR><LI></DIR> (<LI> 放在每一项前)
背景与颜色
3.0 重复排列的背景 <BODY background='/URL'>
N1.1+ 背景颜色 <BODY BGCOLOR='#$$$$$$'> (依序为红、绿、蓝)
N1.1+ 文字颜色 <BODY TEXT='#$$$$$$'>
N1.1+ 连结颜色 <BODY LINK='#$$$$$$'>
N1.1+ 看过的连结 <BODY VLINK='#$$$$$$'>
N1.1 使用中的连结 <BODY ALINK='#$$$$$$'>
4.特殊字元(以下标签需用小写)
特别符号 &#?; (其中 ? 代表 ISO 8859-1 的编码)
< < > > & & ' '
注册商标TM ?
N1.0+ 注册商标TM ?
著作权符号 ?
N1.0+ 著作权符号 ?
5.表单 (通常需要与CGI程式配合)
定义表单 <FORM ACTION='URL' METHOD=GET|POST></FORM>
N2.0 上传档案 <FORM ENCTYPE='multipart/form-data></FORM>
输入栏位 <INPUT TYPE='TEXT|PASSWORD|CHECKBOX|RADIO|IMAGE|HIDDEN|SUBMIT|RESET'>
栏位名称 <INPUT NAME='***'>
栏位内定值 <INPUT value='***'>
已选定 <INPUT CHECKED> (适用於checkboxes与 radio boxes)
栏位宽度 <INPUT SIZE=?> (以字元数为单位)
最长字数 <INPUT MAXLENGTH=?> (以字元数为单位)
下拉式选单 <SELECT></SELECT>
下拉式选单名称 <SELECT NAME='***'></SELECT>
选单项目数量 <SELECT SIZE=?></SELECT>
多选式选单 <SELECT MULTIPLE> (多选)
选项 <OPTION>
内定选项 <OPTION SELECTED>
文字输入区 <TEXTAREA ROWS=? COLS=?></TEXTAREA>
输入区名称 <TEXTAREA NAME='***'></TEXTAREA>
N2.0 输入区换行方式 <TEXTAREA WRAP=OFF|VIRTUAL|PHYSICAL></TEXTAREA>
6.表格
3.0 定义表格 <TABLE></TABLE>
3.0 表格框线 <TABLE BORDER></TABLE> (有或没有)
N1.1 表格框线 <TABLE BORDER=?></TABLE>(可以设定数值)
N1.1 储存格左右留白 <TABLE CELLSPACING=?>
N1.1 储存格上下留白 <TABLE CELLPADDING=?>
N1.1 表格宽度 <TABLE WIDTH=?> (以pixels为单位)
N1.1 宽度比率 <TABLE WIDTH=%> (页宽为100%)
3.0 表格列 <TR></TR>
3.0 表格列内容看齐 <TR ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM>
3.0 储存格 <TD></TD> (须与列并用)
3.0 储存格内容看齐 <TD ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM>
3.0 不换行 <TD NOWRAP>
N3.0 储存格背景颜色 <TD BGCOLOR=#$$$$$$>
3.0 储存格横向连接 <TD COLSPAN=?>
3.0 储存格纵向连接 <TD ROWSPAN=?>
N1.1 储存格宽度 <TD WIDTH=?> (以pixels为单位)
N1.1 储存格宽度比率 <TD WIDTH=%> (页宽为100%)
3.0 表格标题 <TH></TH> (跟<TD>一样,不过会对中并加粗)
3.0 表格标题对齐 <TH ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM>
3.0 表格标题不换行 <TH NOWRAP>
3.0 表格标题占几栏 <TH COLSPAN=?>
3.0 表格标题占几列 <TH ROWSPAN=?>
N1.1 表格标题宽度 <TH WIDTH=?> (以pixels为单位)
N1.1 表格标题比率宽度<TH WIDTH=%> (页宽为100%)
3.0 表格抬头 <CAPTION></CAPTION>
3.0 表格抬头看齐 <CAPTION ALIGN=TOP|BOTTOM>(在表格之上/之下)
视框 (定义与控制萤幕上的特定区域)
N2.0 视框格式总定义 <FRAMESET></FRAMESET> (取代<BODY>)
N2.0 视框行长度分配 <FRAMESET ROWS=,,,></FRAMESET>(pixels 或 %)
N2.0 视框行长度分配 <FRAMESET ROWS=*></FRAMESET> (* = 相对大小)
N2.0 视框栏宽度分配 <FRAMESET COLS=,,,></FRAMESET>(pixels 或 %)
N2.0 视框栏宽度分配 <FRAMESET COLS=*></FRAMESET> (* =相对大小)
N2.0 定义个别视框 <FRAME> (定义个别视框)
N2.0 个别视框内容 <FRAME src='/URL'>
N2.0 个别视框名称 <FRAME NAME='***'|_blank|_self|_parent|_top>
N2.0 边缘宽度 <FRAME MARGINWIDTH=?> (「左」与「右」边界)
N2.0 边缘高度 <FRAME MARGINHEIGHT=?> (「天顶」与「地底」边界)
N2.0 卷动条 <FRAME SCROLLING='YES|NO|AUTO'>
N2.0 不可改变大小 <FRAME NORESIZE>
N2.0 无视框时的内容 <NOFRAMES></NOFRAMES>(如果浏览器不提供视框功能的话)
7.杂项
说明 <!-- *** --> (浏览器不会显示)

Flink 代码混淆

原理

Java 默认编译完成,很容易反编译出源码逻辑
混淆本质上就是对于生成的class文件中敏感的部分替换,包括包名、类名、类成员变量、类成员函数、函数参数等

最常用的java混淆就是proguard混淆
对应仓库 https://github.com/Guardsquare/proguard

Flink代码混淆

这样指的是混淆提交给flink运行的业务代码,不是混淆flink的框架代码
通常可能是scala+java的混编代码,有大量的序列化逻辑存在,因此需要注意proguard的配置
通常的java工程和spring的混淆配置不适用

maven配置

借助maven插件 https://github.com/wvengen/proguard-maven-plugin
完成编译完成自动混淆

增加如下配置

<properties>
<proguard-maven-plugin.version>2.5.1</proguard-maven-plugin.version>
    <proguard.version>7.1.1</proguard.version>
</properties>

<!--proguard混淆插件 在build中指定插件-->
<plugin>
    <groupId>com.github.wvengen</groupId>
    <artifactId>proguard-maven-plugin</artifactId>
    <version>$proguard-maven-plugin.version</version>
    <executions>
        <execution>
            <!--打包的时候开始混淆-->
            <phase>package</phase>
            <goals>
                <goal>proguard</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!-- 开启混淆 配置proguard的版本和对应配置文件 -->
        <obfuscate>true</obfuscate>
        <proguardVersion>$proguard.version</proguardVersion>
        <proguardInclude>$basedir/script/obfuscate/proguard.cfg</proguardInclude>

        <!-- 输入输出和对应依赖jar -->
        <!-- -injars -->
        <injar>$project.build.finalName.jar</injar>
        <!-- -outjars -->
        <outjar>$project.build.finalName.jar</outjar>
        <!-- -libraryjars = libs+project dependencies -->
        <libs>
            <lib>$java.home/lib/rt.jar</lib>
            <lib>$java.home/lib/jsse.jar</lib>
            <lib>$java.home/lib/jce.jar</lib>
        </libs>

        <!--增量迭代-->
        <applyMappingFile>$basedir/script/obfuscate/proguard_map.txt</applyMappingFile>

        <!--指定定输出新旧元素名的对照表的文件-->
        <mappingFileName>proguard_map.txt</mappingFileName>
        <!--配置匹配的类或者类成员的详细列表-->
        <seedFileName>proguard_seed.txt</seedFileName>

        <!-- 其它proguard命令配置 -->
        <options>
            <!--默认开启,不做收缩(删除注释、未被引用代码)-->
            <option>-dontshrink</option>
            <!--默认是开启的,这里关闭字节码级别的优化-->
            <option>-dontoptimize</option>

            <!--对于类成员的命名的混淆采取唯一策略,用于mapping文件增量更新-->
            <option>-useuniqueclassmembernames</option>
            <!--混淆时不生成大小写混合的类名,默认是可以大小写混合,保证windows等大小写敏感系统正常-->
            <option>-dontusemixedcaseclassnames </option>

            <!--忽略note消息-->
            <option>-dontnote</option>
        </options>

    </configuration>
    <dependencies>
        <dependency>
            <groupId>com.guardsquare</groupId>
            <artifactId>proguard-base</artifactId>
            <version>$proguard.version</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</plugin>

几点注意说明

  1. 这里打包默认会生成proguard_map.txt和proguard_seed.txt,前者表示具体的混淆列表,后者表示对应命中proguad的keep规则的列表
  2. 混淆后的java包如果报异常,默认我们看到的堆栈中各种名称是混淆后的,如果需要看到对应的混淆前的堆栈,需要利用proguard_map.txt反混淆,具体过程参考文档
    https://www.guardsquare.com/manual/tools/retrace
  3. proguard_map.txt管理需要注意,每次编译后丢失了就很难找回,默认混淆是随机混淆,每次编译混淆结果都不一样。
    一种方式是每次编译的时候都把当前包对应的proguard_map.txt保存起来,比如cicd中上传到指定位置
    另一种是这里的applyMappingFile,配置的是增量map,每次编译时指定映射,这样同一样的代码,只要指相同的proguard_map.txt,混淆结果相同。这里需要初始化时创建这个目录,默认为空文件,每次生成完成后手动替换新的proguard_map.txt到这里的目录

shade混编处理

代码中通常会遇到,需要把所有依赖包一起提交运行的需求,通常会使用maven-shade-plugin插件。
所以如上的配置需要保证混淆前后的包名不变,这样只需要再混淆插件后增加maven-shade-plugin插件,即可基于前一步的混淆结果继续打依赖包。

proguard配置

主要是要保证scala的运行和flink的序列化正常,当前所用配置供参考

-verbose

# 只混淆公司的包
-keep class !com.xxx.xx.**

# scala 参考 https://github.com/Guardsquare/proguard/blob/v7.2.0/examples/standalone/scala.pro

-renamesourcefileattribute SourceFile
-keepattributes Signature,Exceptions,*Annotation*,
                InnerClasses,PermittedSubclasses,EnclosingMethod,
                Deprecated,SourceFile,LineNumberTable

# Preserve all public applications.

-keepclasseswithmembers public class * 
    public static void main(java.lang.String[]);


# Preserve some classes and class members that are accessed by means of
# introspection.

-keep class * implements org.xml.sax.EntityResolver

-keepclassmembers class * 
    ** MODULE$;


# Preserve all native method names and the names of their classes.

-keepclasseswithmembernames,includedescriptorclasses class * 
    native <methods>;


# Preserve the special static methods that are required in all enumeration
# classes.

-keepclassmembers,allowoptimization enum * 
    public static **[] values();
    public static ** valueOf(java.lang.String);


# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
# You can comment this out if your application doesn't use serialization.
# If your code contains serializable classes that have to be backward
# compatible, please refer to the manual.

-keepnames class * implements java.io.Serializable

-keepclassmembers class * implements java.io.Serializable 
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();


# 对于flink 需要处理序列化lambda 问题
# 参考 https://www.guardsquare.com/manual/configuration/examples#serializable
-keepclassmembers class * 
    private static synthetic java.lang.Object $deserializeLambda$(java.lang.invoke.SerializedLambda);


-keepclassmembernames class * 
    private static synthetic *** lambda$*(...);


参考

proguard 官方配置

  • https://www.guardsquare.com/manual/configuration/usage
  • https://www.jianshu.com/p/60e82aafcfd0

proguard maven插件配置

  • https://wvengen.github.io/proguard-maven-plugin/
  • https://langyastudio.blog.csdn.net/article/details/123783160
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于html中常用的标签代码容易记混淆怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

网页制作常用标签

htlm的常用标签都有哪些,还有。。。

分类算法中常用的评价指标

记一些常用的video事件

从零学习微信小程序—— 常用组件

从零学习微信小程序—— 常用组件