整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          HTML代碼中的空格和空行

          子1:(文本內(nèi)容中的連續(xù)空格)

          <p>這段文本中,輸入連續(xù)的空格          大概輸入了十個。</p>

          顯示效果:“格”和“大” 之間的是個空格顯示出來只是一個空格。

          這段文本中,輸入連續(xù)的空格 大概輸入了十個。

          例子2:(代碼之間的連續(xù)空格)

          <span>span是一個行內(nèi)標簽</span>               <span>和前面的span元素之間隔了很多個空格</span>

          顯示效果:兩個span元素之間連續(xù)的空格,顯示出來即"簽"與“和”之間的空格,只有一個空格。

          span是一個行內(nèi)標簽 和前面的span元素之間隔了很多個空格

          上面兩個例子證明:HTML代碼中連續(xù)的空格在顯示時會顯示為一個空格,其余的多余的空格會被移除或者說被忽略。

          段落文本其實也是HTML代碼的一部分,只不過它在p標簽內(nèi)部,而例子2的空格是在兩個span標簽之間。


          理解了空格,現(xiàn)在看看空行,同理

          例子3:(文本內(nèi)容中的空行)

          <p>這段文本中,輸入連續(xù)的空行
          
          
          
          
          
          大概輸入了五行。</p>

          顯示效果:如我們所見,文本代碼中的五行空行,顯示出來也只是一個空格。

          這段文本中,輸入連續(xù)的空行 大概輸入了五行。

          例子4:(元素之間/標簽之間的空行),只要把例子2中的空格換成空行就可以了,顯示效果和例子2的一樣,多行空行都只會顯示為一個空格。

          <span>span是一個行內(nèi)標簽</span>
          
          
          
          
          
          <span>和前面的span元素之間隔了很多空行</span>


          span是一個行內(nèi)標簽 和前面的span元素之間隔了很多空行

          得證:HTML 代碼中的所有連續(xù)的空格或空行(換行)都會被顯示為一個空格。


          既然如此,如果我們希望擴大兩個字符之間的間距,讓代碼中的連續(xù)空格或空行顯示出來的結果也是連續(xù)的空格或空行,那該怎么辦?其實很簡單。

          方法一:我們可以用預格式化標簽<pre>,無論是空格或空行都適用。

          <pre>
          這是
          預格式文本。
          它保留了      空格
          和換行。
          </pre>

          顯示效果

          這是
          預格式文本。
          它保留了      空格
          和換行。


          方法二:我們可以用空格實體符 代替空格,用換行標簽<br/>代替空行。雖然這種方法可以得到我們想要的顯示效果,但是對搜索引擎不是最友好的方式,因為 和<br/>在HTML中都是沒有語義的。所以建議盡量少用。另外需要注意的是, 必須小寫,而且最后面的分號是不能省略的。


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

          全角空格被解釋為漢字,所以不會被被解釋為HTML分隔符,可以按照實際的空格數(shù)顯示。

          問題:怎么使用全角輸入法?

          以搜狗輸入法為例,我們通常使用的是半角輸入,其狀態(tài)欄中有個月亮的標志,就說明正在使用的是半角輸入,如果是太陽的標志,就說明使用的是全角輸入。全角/半角的切換可以通過點擊標志,也可以通過快捷鍵 Shift+Space(空格符)切換。

          半角輸入(月亮)

          全角輸入(太陽)

          方法四:使用CSS樣式中字間隔屬性控制,CSS中的word-spacing 屬性可以改變字(單詞)之間的標準間隔。我們知道英文中兩個單詞之間是通過空格隔開的,所以我們視覺上可以這樣認為,word-spacing改變了(拉長或縮短)單詞之間那個空格的寬度。

          方法五:使用CSS樣式中的white-space 屬性,這個屬性聲明如何處理元素內(nèi)的空白符。

          描述

          normal

          默認。空白會被瀏覽器忽略。

          pre

          空白會被瀏覽器保留。其行為方式類似 HTML 中的 <pre> 標簽。

          nowrap

          文本不會換行,文本會在在同一行上繼續(xù),直到遇到 <br> 標簽為止。

          pre-wrap

          保留空白符序列,但是正常地進行換行。

          pre-line

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


          white-space:normal;就是正常,和不設置一樣,連續(xù)空格和空行都只會顯示一個空格。

          white-space:nowrap;不換行是什么意思呢?正常情況下,當我們的文本超出了文本域,文本就會自動折行,這個設置就是說不自動折行了,而是碰到換行標簽<br />才換

          white-space:pre;和方法一相同,將文本原樣輸出顯示。當文本超出文本域時,不換行,會產(chǎn)生滾動條。

          white-space:pre-wrap;保留空格和空行,但當文本超出文本域時,會自動換行。

          white-space:pre-line;連續(xù)的空格會顯示為一個空格,但保留連續(xù)的空行。

          TML 代碼約定

          很多 Web 開發(fā)人員對 HTML 的代碼規(guī)范知之甚少。

          在2000年至2010年,許多Web開發(fā)人員從 HTML 轉(zhuǎn)換到 XHTML。

          使用 XHTML 開發(fā)人員逐漸養(yǎng)成了比較好的 HTML 編寫規(guī)范。

          而針對于 HTML5 ,我們應該形成比較好的代碼規(guī)范,以下提供了幾種規(guī)范的建議。

          使用正確的文檔類型

          文檔類型聲明位于HTML文檔的第一行:

          <!DOCTYPE html>

          如果你想跟其他標簽一樣使用小寫,可以使用以下代碼:

          <!doctype html>

          使用小寫元素名

          HTML5 元素名可以使用大寫和小寫字母。

          推薦使用小寫字母:

          • 混合了大小寫的風格是非常糟糕的。

          • 開發(fā)人員通常使用小寫 (類似 XHTML)。

          • 小寫風格看起來更加清爽。

          • 小寫字母容易編寫。

          不推薦:

          <SECTION>

          <p>這是一個段落。</p>

          </SECTION>

          非常糟糕:

          <Section>

          <p>這是一個段落。</p>

          </SECTION>

          推薦:

          <section>

          <p>這是一個段落。</p>

          </section>

          關閉所有 HTML 元素

          在 HTML5 中, 你不一定要關閉所有元素 (例如 <p> 元素),但我們建議每個元素都要添加關閉標簽。

          不推薦:

          <section>

          <p>這是一個段落。

          <p>這是一個段落。

          </section>

          推薦:

          <section>

          <p>這是一個段落。</p>

          <p>這是一個段落。</p>

          </section>

          關閉空的 HTML 元素

          在 HTML5 中, 空的 HTML 元素也不一定要關閉:

          我們可以這么寫:

          <meta charset="utf-8">

          也可以這么寫:

          <meta charset="utf-8" />

          在 XHTML 和 XML 中斜線 (/) 是必須的。

          如果你期望 XML 軟件使用你的頁面,使用這種風格是非常好的。

          使用小寫屬性名

          HTML5 屬性名允許使用大寫和小寫字母。

          我們推薦使用小寫字母屬性名:

          • 同時使用大小寫是非常不好的習慣。

          • 開發(fā)人員通常使用小寫 (類似 XHTML)。

          • 小寫風格看起來更加清爽。

          • 小寫字母容易編寫。

          不推薦:

          <div CLASS="menu">

          推薦:

          <div class="menu">

          屬性值

          HTML5 屬性值可以不用引號。

          屬性值我們推薦使用引號:

          • 如果屬性值含有空格需要使用引號。

          • 混合風格不推薦的,建議統(tǒng)一風格。

          • 屬性值使用引號易于閱讀。

          以下實例屬性值包含空格,沒有使用引號,所以不能起作用:

          <table class=table striped>

          以下使用了雙引號,是正確的:

          <table class="table striped">

          圖片屬性

          圖片通常使用 alt 屬性。 在圖片不能顯示時,它能替代圖片顯示。

          <img src="html5.gif" alt="HTML5" style="width:128px;height:128px">

          定義好圖片的尺寸,在加載時可以預留指定空間,減少閃爍。

          <img src="html5.gif" alt="HTML5" style="width:128px;height:128px">

          空格和等號

          等號前后可以使用空格。

          <link rel = "stylesheet" href = "styles.css">

          但我們推薦少用空格:

          <link rel="stylesheet" href="styles.css">

          避免一行代碼過長

          使用 HTML 編輯器,左右滾動代碼是不方便的。

          每行代碼盡量少于 80 個字符。

          空行和縮進

          不要無緣無故添加空行。

          為每個邏輯功能塊添加空行,這樣更易于閱讀。

          縮進使用兩個空格,不建議使用 TAB。

          比較短的代碼間不要使用不必要的空行和縮進。

          不必要的空行和縮進:

          <body>

          <h1>菜鳥教程</h1>

          <h2>HTML</h2>

          <p>

          菜鳥教程,學的不僅是技術,更是夢想。

          菜鳥教程,學的不僅是技術,更是夢想。

          菜鳥教程,學的不僅是技術,更是夢想,

          菜鳥教程,學的不僅是技術,更是夢想。

          </p>

          </body>

          推薦:

          <body>

          <h1>菜鳥教程</h1>

          <h2></h2>

          <p>菜鳥教程,學的不僅是技術,更是夢想。

          菜鳥教程,學的不僅是技術,更是夢想。

          菜鳥教程,學的不僅是技術,更是夢想。

          菜鳥教程,學的不僅是技術,更是夢想。</p>

          </body>

          表格實例:

          <table>

          <tr>

          <th>Name</th>

          <th>Description</th>

          </tr>

          <tr>

          <td>A</td>

          <td>Description of A</td>

          </tr>

          <tr>

          <td>B</td>

          <td>Description of B</td>

          </tr>

          </table>

          列表實例:

          <ol>

          <li>London</li>

          <li>Paris</li>

          <li>Tokyo</li>

          </ol>

          省略 <html> 和 <body>?

          在標準 HTML5 中, <html> 和 <body> 標簽是可以省略的。

          以下 HTML5 文檔是正確的:

          實例:

          <!DOCTYPE html>

          <head>

          <title>頁面標題</title>

          </head>

          <h1>這是一個標題</h1>

          <p>這是一個段落。</p>

          嘗試一下 ?

          不推薦省略 <html> 和 <body> 標簽。

          <html> 元素是文檔的根元素,用于描述頁面的語言:

          <!DOCTYPE html>

          <html lang="zh">

          聲明語言是為了方便屏幕閱讀器及搜索引擎。

          省略 <html> 或 <body> 在 DOM 和 XML 軟件中會崩潰。

          省略 <body> 在舊版瀏覽器 (IE9)會發(fā)生錯誤。

          省略 <head>?

          在標準 HTML5 中, <head>標簽是可以省略的。

          默認情況下,瀏覽器會將 <body> 之前的內(nèi)容添加到一個默認的 <head> 元素上。

          實例

          <!DOCTYPE html>

          <html>

          <title>頁面標題</title>

          <body>

          <h1>這是一個標題</h1>

          <p>這是一個段落。</p>

          </body>

          </html>

          嘗試一下 ?

          現(xiàn)在省略 head 標簽還不推薦使用。

          元數(shù)據(jù)

          HTML5 中 <title> 元素是必須的,標題名描述了頁面的主題:

          <title>菜鳥教程</title>

          標題和語言可以讓搜索引擎很快了解你頁面的主題:

          <!DOCTYPE html>

          <html lang="zh">

          <head>

          <meta charset="UTF-8">

          <title>菜鳥教程</title>

          </head>

          HTML 注釋

          注釋可以寫在 <!-- 和 --> 中:

          <!-- 這是注釋 -->

          比較長的評論可以在 <!-- 和 --> 中分行寫:

          <!--

          這是一個較長評論。 這是 一個較長評論。這是一個較長評論。

          這是 一個較長評論 這是一個較長評論。 這是 一個較長評論。

          -->

          長評論第一個字符縮進兩個空格,更易于閱讀。

          樣式表

          樣式表使用簡潔的語法格式 ( type 屬性不是必須的):

          <link rel="stylesheet" href="styles.css">

          短的規(guī)則可以寫成一行:

          p.into {font-family: Verdana; font-size: 16em;}

          長的規(guī)則可以寫成多行:

          body {

          background-color: lightgrey;

          font-family: "Arial Black", Helvetica, sans-serif;

          font-size: 16em;

          color: black;

          }

          • 將左花括號與選擇器放在同一行。

          • 左花括號與選擇器間添加以空格。

          • 使用兩個空格來縮進。

          • 冒號與屬性值之間添加已空格。

          • 逗號和符號之后使用一個空格。

          • 每個屬性與值結尾都要使用符號。

          • 只有屬性值包含空格時才使用引號。

          • 右花括號放在新的一行。

          • 每行最多 80 個字符。

          在逗號和分號后添加空格是常用的一個規(guī)則。

          在 HTML 中載入 JavaScript

          使用簡潔的語法來載入外部的腳本文件 ( type 屬性不是必須的 ):

          <script src="myscript.js">

          使用 JavaScript 訪問 HTML 元素

          一個糟糕的 HTML 格式可能會導致 JavaScript 執(zhí)行錯誤。

          以下兩個 JavaScript 語句會輸出不同結果:

          實例

          var obj = getElementById("Demo")

          var obj = getElementById("demo")

          HTML 中 JavaScript 盡量使用相同的命名規(guī)則。

          訪問 JavaScript 代碼規(guī)范。

          使用小寫文件名

          大多 Web 服務器 (Apache, Unix) 對大小寫敏感: london.jpg 不能通過 London.jpg 訪問。

          其他 Web 服務器 (Microsoft, IIS) 對大小寫不敏感: london.jpg 可以通過 London.jpg 或 london.jpg 訪問。

          你必須保持統(tǒng)一的風格,我們建議統(tǒng)一使用小寫的文件名。

          文件擴展名

          HTML 文件后綴可以是 .html (或r .htm)。

          CSS 文件后綴是 .css 。

          JavaScript 文件后綴是 .js 。

          .htm 和 .html 的區(qū)別

          .htm 和 .html 的擴展名文件本質(zhì)上是沒有區(qū)別的。瀏覽器和 Web 服務器都會把它們當作 HTML 文件來處理。

          區(qū)別在于:

          .htm 應用在早期 DOS 系統(tǒng),系統(tǒng)現(xiàn)在或者只能有三個字符。

          在 Unix 系統(tǒng)中后綴沒有特別限制,一般用 .html。

          技術上區(qū)別

          如果一個 URL 沒有指定文件名 (如 http://www.runoob.com/css/), 服務器會返回默認的文件名。通常默認文件名為 index.html, index.htm, default.html, 和 default.htm。

          如果服務器只配置了 "index.html" 作為默認文件,你必須將文件命名為 "index.html", 而不是 "index.htm"。

          但是,通常服務器可以設置多個默認文件,你可以根據(jù)需要設置默認文件嗎。

          不管怎樣,HTML 完整的后綴是 ".html"。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          頁 URL 中的特殊字符 “空格” 問題

          Java 代碼案例

          1、將一段內(nèi)容和接口拼接成 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=小黑
          

          網(wǎng)頁截圖:

          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=小+黑
          

          網(wǎng)頁截圖:

          3、解決空格的問題

          java復制代碼public static String generateContent(String content) {
                // 將 content 進行 url 編碼
                String ans;
                try {
          					// -----------------------調(diào)整-----------------------
                    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=小 黑
          

          網(wǎng)頁截圖:

          其中 %20 是空格經(jīng)過編碼后的結果

          2、問題解決的原因

          從上面的案例可以看到,如果 url 中有空格出現(xiàn),且不經(jīng)過特殊處理,那么將會導致瀏覽器無法正確解析 url,從而導致 url 重定向失敗,那么問題的原因是什么呢?首先來看一下URL的組成部分

          1、URL 的組成部分

          下面是一個簡單的 URL 鏈接:

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

          它主要有下面幾個部分組成

          • 協(xié)議:URL 的網(wǎng)絡傳輸協(xié)議,如 http、https、ftp 等。表示資源訪問需使用何種協(xié)議;
          • 服務器名稱:表示要訪問的服務器主機名或 IP 地址;
          • 端口(可選):服務器使用的端口號,如 http 默認的端口是 80,https 默認的端口是443,如果省略則使用該協(xié)議的默認端口;
          • 路徑:表示服務器上具體資源的路徑信息:例如“/index.html”;
          • 查詢參數(shù)(可選):路徑后加問號開頭的查詢字符串,用于傳遞額外的參數(shù),如”?id=123”;
          • 錨點(可選):鏈接內(nèi)的超鏈接錨點定位,例如“#content”;
            • HTTP請求不包括#
            • #是用來指導瀏覽器動作的,針對瀏覽器起作用,對服務器端完全無用
            • 訪問http://www.example.com/index.html#print,瀏覽器實際發(fā)出的請求只是請求index.html,沒有"#print"部分。
            • 位于#后面的字符都是位置標識符
            • 在第一個#后面出現(xiàn)的任何字符,都會被瀏覽器解讀為位置標識符。 這意味著,這些字符都不會被發(fā)送到服務器端。
            • 在URL中指定一個顏色值 http://www.example.com/?color=#fff 但瀏覽器實際發(fā)出的請求是"#fff"被省略了。只有將#轉(zhuǎn)碼為%23,瀏覽器才會將其作為實義字符處理。http://example.com/?color=%23fff
            • 改變#后面的參數(shù)不會觸發(fā)頁面重載
            • 改變#后面的參數(shù)會改變?yōu)g覽器的訪問歷史
          • 用戶名密碼(可選):用于基礎的 HTTP 認證的用戶名和密碼;

          2、URL 編碼中遵循的規(guī)則

          在 URL 編碼過程中,會遵循以下的規(guī)則:

          • 空格:替換成 + (%20)
          • /:分割目錄和子目錄
          • ?:分割 URL 和查詢
          • %:指定特殊字符
          • #:指定書簽 (%23)
          • &:指定分隔參數(shù) (%26)
          • =:指定參數(shù)的值(%3D)

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

          • URL 作為資源定位符,它需要保證各個組成部分(協(xié)議、主機名、端口、路徑等)之間使用統(tǒng)一的分隔符,通常采用斜線"/"。如果直接使用空格,很難區(qū)分路徑中的空格與路徑之間的分隔;
          • 早期URL標準沒有規(guī)定如何處理空格等特殊字符,直接包含空格可能導致解析或匹配時產(chǎn)生歧義;
          • 例如:http://www.example.com/products/product name.html
          • 當瀏覽器在解析這個 URL 的時候,可能就會產(chǎn)生下面的歧義問題:
          • 1、是否應該解析為兩個路徑組件"products/product"和"name.html”
          • 2、搜索引擎或其他系統(tǒng)進行URL匹配檢索時,不清楚空格是否應該作為路徑分隔符來匹配; 3、攻擊者可以構造歧義URL,利用空格來規(guī)避安全機制或進行異常操作;
          • 包含空格特殊字符可能會破壞URL本身結構或?qū)е掳踩珕栴};
          • 包含空格可能導致傳輸或存儲時產(chǎn)生問題。例如傳輸過程中空格是否需要編碼等問題沒有明確規(guī)定;

          主站蜘蛛池模板: 国产在线观看一区二区三区精品| 久久精品免费一区二区喷潮| 国产剧情国产精品一区| 99精品国产高清一区二区| 波多野结衣久久一区二区| 欧美成人aaa片一区国产精品 | 国产成人无码精品一区二区三区| 国产在线无码视频一区| 亚洲国产综合无码一区| 中文字幕av日韩精品一区二区| 国产日韩精品一区二区在线观看播放 | 在线视频精品一区| 国产成人久久精品一区二区三区 | 伊人久久精品一区二区三区| 三上悠亚一区二区观看| 久久久久久人妻一区二区三区 | 精品福利一区二区三区精品国产第一国产综合精品 | 亚州AV综合色区无码一区| 国产一区二区三区在线影院| 国产在线第一区二区三区| 久久精品国产第一区二区三区 | 亚洲欧美成人一区二区三区| 男插女高潮一区二区| 国产精品香蕉在线一区| 成人精品一区二区三区校园激情 | 国产免费伦精品一区二区三区| bt7086福利一区国产| 日韩美女视频一区| 波霸影院一区二区| 国产一区二区三区不卡在线观看| 天堂一区二区三区在线观看| 精品无码一区二区三区爱欲| 中文字幕精品一区二区| 精品免费国产一区二区| 福利片福利一区二区三区| 亚洲免费一区二区| 精品国产乱子伦一区二区三区| 手机福利视频一区二区| 一区二区视频传媒有限公司| 91福利国产在线观一区二区| 在线电影一区二区|