整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

关于解决网页制作中的空格问题

面小编为大家带来的是解决网页制作中的空格问题,这里详细的介绍了解决网页制作中的空格问题的相关知识,希望能对大家有所帮助。

Dreamweaver是一个非常简单易用但又功能强大的网页制作软件。但是,它却又一个令很多初学者很困惑的问题。那就是空格。在Dreamweaver中使用空格远远没有象word中一样方便。比如首行无法空格,句子中间空一格以上都是不行的。原因是什幺呢?这是因为在HTML语言中多于一个的空格都被忽略不计。这样就造成了空格困难的原因。如何很好地解决Dreamweaver的空格问题呢?解决的方案有很多:1、 制作一张很小的透明图片。嵌入到文本当中或者行首。这种方法实现起来比较麻烦。2、 使用全角空格。为什幺这种方案可行呢?因为全角空格实现起来比较简单。虽然也是空格但是对应的HTML代码却不是空格代码。而是另外的代码,因此Dreamweaver把他当字符处理而不是空格。所以可以相安无事。但是在不支持中文字符集的浏览器看来就是乱码了。3、 使用软空格。即在要插入空格的地方按Ctrl+shift+空格。这样的空格所有浏览器都能认识。但是缺点是在页面编辑的时候无法看见插入了多少空格,只能在浏览器预览的时候才能看清楚。不够直观。软空格其实使用的是代码。是不间断空距标记。他可以生成软空格。每按一下Ctrl+shift+空格就是增加一个代码。代码虽然简单,但是它的作用也很大。在做网页时候我们空出一行或者几行就要靠这个代码来帮忙。学过HTML语言的朋友都知;;标签是用来标记一个段落的。如果光写;;这段代码是不是就可以生成空行呢?这是无效的。必须在;标签中增加“;”代码才行。; ;这样的代码才会有空行效果。这里该标记也是起了占据位置的作用。另外如果用Dreamweaver生成一张表格,察看源代码的时候会发现。

子1:(文本内容中的连续空格)

<p>这段文本中,输入连续的空格          大概输入了十个。</p>

显示效果:“格”和“大” 之间的是个空格显示出来只是一个空格。

这段文本中,输入连续的空格 大概输入了十个。

例子2:(代码之间的连续空格)

<span>span是一个行内标签</span>               <span>和前面的span元素之间隔了很多个空格</span>

显示效果:两个span元素之间连续的空格,显示出来即"签"与“和”之间的空格,只有一个空格。

span是一个行内标签 和前面的span元素之间隔了很多个空格

上面两个例子证明:HTML代码中连续的空格在显示时会显示为一个空格,其余的多余的空格会被移除或者说被忽略。

段落文本其实也是HTML代码的一部分,只不过它在p标签内部,而例子2的空格是在两个span标签之间。


理解了空格,现在看看空行,同理

例子3:(文本内容中的空行)

<p>这段文本中,输入连续的空行





大概输入了五行。</p>

显示效果:如我们所见,文本代码中的五行空行,显示出来也只是一个空格。

这段文本中,输入连续的空行 大概输入了五行。

例子4:(元素之间/标签之间的空行),只要把例子2中的空格换成空行就可以了,显示效果和例子2的一样,多行空行都只会显示为一个空格。

<span>span是一个行内标签</span>





<span>和前面的span元素之间隔了很多空行</span>


span是一个行内标签 和前面的span元素之间隔了很多空行

得证:HTML 代码中的所有连续的空格或空行(换行)都会被显示为一个空格。


既然如此,如果我们希望扩大两个字符之间的间距,让代码中的连续空格或空行显示出来的结果也是连续的空格或空行,那该怎么办?其实很简单。

方法一:我们可以用预格式化标签<pre>,无论是空格或空行都适用。

<pre>
这是
预格式文本。
它保留了      空格
和换行。
</pre>

显示效果

这是
预格式文本。
它保留了      空格
和换行。


方法二:我们可以用空格实体符 代替空格,用换行标签<br/>代替空行。虽然这种方法可以得到我们想要的显示效果,但是对搜索引擎不是最友好的方式,因为 和<br/>在HTML中都是没有语义的。所以建议尽量少用。另外需要注意的是, 必须小写,而且最后面的分号是不能省略的。


方法三:(适合空格)使用全角空格

全角空格被解释为汉字,所以不会被被解释为HTML分隔符,可以按照实际的空格数显示。

问题:怎么使用全角输入法?

以搜狗输入法为例,我们通常使用的是半角输入,其状态栏中有个月亮的标志,就说明正在使用的是半角输入,如果是太阳的标志,就说明使用的是全角输入。全角/半角的切换可以通过点击标志,也可以通过快捷键 Shift+Space(空格符)切换。

半角输入(月亮)

全角输入(太阳)

方法四:使用CSS样式中字间隔属性控制,CSS中的word-spacing 属性可以改变字(单词)之间的标准间隔。我们知道英文中两个单词之间是通过空格隔开的,所以我们视觉上可以这样认为,word-spacing改变了(拉长或缩短)单词之间那个空格的宽度。

方法五:使用CSS样式中的white-space 属性,这个属性声明如何处理元素内的空白符。

描述

normal

默认。空白会被浏览器忽略。

pre

空白会被浏览器保留。其行为方式类似 HTML 中的 <pre> 标签。

nowrap

文本不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止。

pre-wrap

保留空白符序列,但是正常地进行换行。

pre-line

合并空白符序列,但是保留换行符。


white-space:normal;就是正常,和不设置一样,连续空格和空行都只会显示一个空格。

white-space:nowrap;不换行是什么意思呢?正常情况下,当我们的文本超出了文本域,文本就会自动折行,这个设置就是说不自动折行了,而是碰到换行标签<br />才换

white-space:pre;和方法一相同,将文本原样输出显示。当文本超出文本域时,不换行,会产生滚动条。

white-space:pre-wrap;保留空格和空行,但当文本超出文本域时,会自动换行。

white-space:pre-line;连续的空格会显示为一个空格,但保留连续的空行。

页 URL 中的特殊字符 “空格” 问题

Java 代码案例

1、将一段内容和接口拼接成 URL 链接

代码示例

java复制代码public static String generateContent(String content) {
      // 将 content 进行 url 编码
      String ans;
      try {
          ans = URLEncoder.encode(content, "UTF-8");
      } catch (UnsupportedEncodingException e) {
          // 处理异常情况
          throw new RuntimeException(e);
      }

      return ans;
}

1、不带空格的处理

java复制代码public static void main(String[] args) {
    String baseUrl = "https://example.com/resource?a=";
    String content = "小黑";
    String ansUrl = baseUrl + generateContent(content);
    System.out.println("最终生成的 URL 的值为:" + ansUrl);
}

运行结果:

perl复制代码https://example.com/resource?a=%E5%B0%8F%E9%BB%91

粘贴到浏览器上会被浏览器解码出来给用户看到:

ini复制代码example.com/resource?a=小黑

网页截图:

2、带有空格的处理

java复制代码public static void main(String[] args) {
    String baseUrl = "https://example.com/resource?a=";
    String content = "小 黑";
    String ansUrl = baseUrl + generateContent(content);
    System.out.println("最终生成的 URL 的值为:" + ansUrl);
}

运行结果:

perl复制代码https://example.com/resource?a=%E5%B0%8F+%E9%BB%91

粘贴到浏览器上会被浏览器解码出来给用户看到:

ini复制代码https://example.com/resource?a=小+黑

网页截图:

3、解决空格的问题

java复制代码public static String generateContent(String content) {
      // 将 content 进行 url 编码
      String ans;
      try {
					// -----------------------调整-----------------------
          ans = URLEncoder.encode(content, "UTF-8").replace("+", "%20");
      } catch (UnsupportedEncodingException e) {
          // 处理异常情况
          throw new RuntimeException(e);
      }

      return ans;
}

public static void main(String[] args) {
    String baseUrl = "https://example.com/resource?a=";
    String content = "小 黑";
    String ansUrl = baseUrl + generateContent(content);
    System.out.println("最终生成的 URL 的值为:" + ansUrl);
}

运行结果:

perl复制代码https://example.com/resource?a=%E5%B0%8F%20%E9%BB%91

粘贴到浏览器上会被浏览器解码出来给用户看到:

ini复制代码https://example.com/resource?a=小 黑

网页截图:

其中 %20 是空格经过编码后的结果

2、问题解决的原因

从上面的案例可以看到,如果 url 中有空格出现,且不经过特殊处理,那么将会导致浏览器无法正确解析 url,从而导致 url 重定向失败,那么问题的原因是什么呢?首先来看一下URL的组成部分

1、URL 的组成部分

下面是一个简单的 URL 链接:

bash复制代码http://localhost:8080/path/to/index.html?id=123#content

它主要有下面几个部分组成

  • 协议:URL 的网络传输协议,如 http、https、ftp 等。表示资源访问需使用何种协议;
  • 服务器名称:表示要访问的服务器主机名或 IP 地址;
  • 端口(可选):服务器使用的端口号,如 http 默认的端口是 80,https 默认的端口是443,如果省略则使用该协议的默认端口;
  • 路径:表示服务器上具体资源的路径信息:例如“/index.html”;
  • 查询参数(可选):路径后加问号开头的查询字符串,用于传递额外的参数,如”?id=123”;
  • 锚点(可选):链接内的超链接锚点定位,例如“#content”;
    • HTTP请求不包括#
    • #是用来指导浏览器动作的,针对浏览器起作用,对服务器端完全无用
    • 访问http://www.example.com/index.html#print,浏览器实际发出的请求只是请求index.html,没有"#print"部分。
    • 位于#后面的字符都是位置标识符
    • 在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。 这意味着,这些字符都不会被发送到服务器端。
    • 在URL中指定一个颜色值 http://www.example.com/?color=#fff 但浏览器实际发出的请求是"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。http://example.com/?color=%23fff
    • 改变#后面的参数不会触发页面重载
    • 改变#后面的参数会改变浏览器的访问历史
  • 用户名密码(可选):用于基础的 HTTP 认证的用户名和密码;

2、URL 编码中遵循的规则

在 URL 编码过程中,会遵循以下的规则:

  • 空格:替换成 + (%20)
  • /:分割目录和子目录
  • ?:分割 URL 和查询
  • %:指定特殊字符
  • #:指定书签 (%23)
  • &:指定分隔参数 (%26)
  • =:指定参数的值(%3D)

3、为何 URL 中不允许包含空格和部分特殊字符

  • URL 作为资源定位符,它需要保证各个组成部分(协议、主机名、端口、路径等)之间使用统一的分隔符,通常采用斜线"/"。如果直接使用空格,很难区分路径中的空格与路径之间的分隔;
  • 早期URL标准没有规定如何处理空格等特殊字符,直接包含空格可能导致解析或匹配时产生歧义;
  • 例如:http://www.example.com/products/product name.html
  • 当浏览器在解析这个 URL 的时候,可能就会产生下面的歧义问题:
  • 1、是否应该解析为两个路径组件"products/product"和"name.html”
  • 2、搜索引擎或其他系统进行URL匹配检索时,不清楚空格是否应该作为路径分隔符来匹配; 3、攻击者可以构造歧义URL,利用空格来规避安全机制或进行异常操作;
  • 包含空格特殊字符可能会破坏URL本身结构或导致安全问题;
  • 包含空格可能导致传输或存储时产生问题。例如传输过程中空格是否需要编码等问题没有明确规定