<p>Vue では、スペースを置換するために <code> </code> を使用することがありますが、<code> </code> が機能せず、依然としてスペースが表示されることがわかります。どうしてこれなの?この記事では、この問題を調査し、解決する方法を紹介します。 </p>
<p>まず、<code> </code> とスペースの違いを理解する必要があります。 <code> </code> は、非改行スペース (非改行スペース) を表す HTML エンティティ文字です。つまり、この位置では改行と単語のハイフネーションは許可されません。通常のスペースは、改行や段落区切りが必要な場合に自動的に分割される可能性があるため、通常は <code> </code> を使用して、改行が許可されない位置にスペースの隙間を設けます。 </p>
<p>Vue では、<code>v-html</code> ディレクティブを使用して、HTML 文字列をページ上に動的にレンダリングできます。たとえば、次のように記述できます: </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><template>
<div v-html="htmlStr"></div>
</template>
<script>
export default {
data() {
return {
htmlStr: 'hello world'
}
}
}
</script></pre><div class="contentsignin">ログイン後にコピー</div></div><p> ただし、ページで <code>hello world</code> を取得しようとすると、<code> </code> が機能しないことがわかります。 、まだスペースが表示されます。 </p><p>それでは、なぜこの問題が発生するのでしょうか?これは、Vue の <code>v-html</code> ディレクティブが XSS 攻撃を防ぐために入力 HTML 文字列を自動的にエスケープするためです。 Vue は特殊文字 (<code><</code>、<code>></code>、<code>&</code>、<code>'</code>、<code>"</code>、など) 対応する HTML エンティティ文字に変換します。</p><p>エンティティ文字 <code> </code> については、Vue はそれを実際の非改行スペースに変換しません。これは互換性を維持するためです。場合によっては、<code> </code> をエンティティ文字ではなく文字列として扱う必要があるため、Vue はデフォルトで <code> </code> をエスケープしません。 Vue の </p>v-html<p> ディレクティブは <code> </code> を正しく解析しないため、この問題をどのように解決すればよいでしょうか? 参考のために 2 つの方法を示します。<code></code>1.スペースバー</p><h3>最も簡単な方法は、</h3> <p>の代わりに通常のスペースバーを使用することです。たとえば、次のように書くことができます:<code><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><template>
<div>{{msg}} world</div>
</template>
<script>
export default {
data() {
return {
msg: 'hello'
}
}
}
</script></pre><div class="contentsignin">ログイン後にコピー</div></div> </code>このように、エスケープを気にせずに、文字列 </p>hello world<p> を正しく取得できます。<code></code>2. 本当に </p> # を使用する必要がある場合は、正規表現を使用して <h3></h3> を置き換えます。 ## スペースバーの代わりに、正規表現を使用して実際の非改行スペースに置き換えることができます。たとえば、次のように記述できます: <p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><template>
<div v-html="htmlStr"></div>
</template>
<script>
export default {
data() {
return {
htmlStr: 'hello world'
}
},
computed: {
unescapeHtml() {
return this.htmlStr.replace(/ /g, 'u00A0');
}
}
}
</script></pre><div class="contentsignin">ログイン後にコピー</div></div><code>上記のコード </code>computed</p>##htmlStr<p> の # 属性は、すべての <code> </code> を実際の非改行スペース文字に置き換え、置き換えられた結果を返します。テンプレートでは、<code>v-html</code> を使用できます。ディレクティブを作成し、<code>unescapeHtml</code> 計算プロパティを呼び出します: <code><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><template>
<div v-html="unescapeHtml"></div>
</template></pre><div class="contentsignin">ログイン後にコピー</div></div>この方法で、<code>hello world</code> この文字列を正しく取得できます。 Vue、 <p> は、通常の HTML 文字列のように期待どおりに動作しません。必要なのは、より柔軟なメソッドです。この問題を解決してください。スペースバーや正規表現などのメソッドを使用することで、この問題を回避でき、正しい結果が得られます。<code></code></p>
以上がvue nbsp スペースが機能しないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。