4

これは不可能だと確信しています。どういうわけか、私のHTMLマークアップの段落内の複数のスペースが折りたたまれていません。それらは、タグ内ではなく &nbsp;、またはに設定されておら、要素を強制することによって動作が変更されることはありません。<pre>white-space: pre-wrap;white-space: pre;style="white-space: normal;"

私の理解では、これらは空白を保持できる唯一の3つの方法であり、2つ以上のスペースをHTMLに表示することができます。

したがって、問題は次のとおりです。他に何が原因で、連続する空白が複数のスペースとして表示される可能性がありますか?他に何かがあるに違いありませんが、それが何であるかを知るまで私はそれを探すことができず、私が見つけたすべての情報源はただ話しているだけです&nbsp;、または<pre>white-space: pre-wrap;white-space: pre;

キー編集: Firebugを使用して、問題のある空白の一部を削除し、もう一度入力してみました。削除してキーボードから再入力すると、スペースは通常どおりに動作します。ブラウザに予期しない空白はありません。したがって、ビューソース、テキストエディタなどにプレーンスペースとして表示される文字である必要がありますが、実際にはのように動作し&nbsp;ます。それは何である可能性があり、そして決定的に、それを削除するためにそれをどのように識別することができますか?問題のある入力の元のソースはwysiwygエディターのTinyMCEであるため、そのタグを追加しています...


詳細:次のように、複数のスペースを含む段落テキストを含むHTMLがあります(... sの間はFirefoxビューソースから直接コピーされます):

<p> blah blah.... nothing  more  than  a ... blah blah </p>

ご覧のとおり、これらは通常のスペースであり、ではありません &nbsp;。ドキュメントには&nbsp;他の場所があり、それらはビューソースにそのように表示されるため&nbsp;、ソース内の通常のスペースになりすましているわけではありません。

また、CSSは次のように設定されていません white-space: pre;

  • Firebugの「計算済み」パネルには、空白に関連するルールは表示されません。
  • 段落にaを強制しwhite-space: normal;ても、スペースに違いはありません。ルールはFirebugの[計算済み]パネルに表示されるため、適用されます。
  • 段落に適用するwhite-space: pre-wrap;と、他の変更が発生しますが、これらの複数のシーケンシャルスペースは変更されません。たとえば、選択したテキストの段落内の各改行の終わりに余分なスペースが表示されます。だから、それはどういうわけかステルスに設定されているわけではありませんwhite-space: pre-wrap;

ドキュメントのどこにも<pre> タグはありません。<preソースで検索しても何も見つかりません。

したがって、各単語の間に1つのスペースを入れてブラウザに表示する必要があります。そうではありません。<pre>または&nbsp;または のように複数のスペースが表示されますwhite-space: pre;。しかし、それはこれらのどれでもありません。

私が知らないような効果を得る他の方法があるに 違いありません。white-space: pre;空白を事前にフォーマットし、複数のスペースの崩壊を防ぐ他の方法はありますか?これを引き起こしている可能性があるもの。


いくつかの背景メモ:

  • どのブラウザで見られますか?Firefox 16.0.2、Google Chrome 23.0.1271.95 m(Windows)
  • マークアップを表示したくないのに、マークアップにダブルスペースの空白があるのはなぜですか?私は、ユーザーがTinyMCE wysiwyg(交渉不可)を介してWordおよびPDFからテキストを入力するCMSのフロントエンド/設計に取り組んでいます。したがって、マークアップは乱雑になります。空白をスクラブしてマークアップをクリーンアップするようにCMSテキストフォーマッターを修正することは、この作業の範囲外です。
  • Doctype? <!DOCTYPE html PUBLIC "-//W3C//DTD HTML+RDFa 1.1//EN">
  • 複数のスペースがあると思いますか?確かに、ブラウザのフロントエンドでは、単語の間に1つ、2つ、場合によっては3つのスペースを選択できます。
  • すべてのcodezを見ることができますか?申し訳ありませんが、これはリリース前のサイトであり、公開されていません。特定のCSSルール、HTMLタグ、ロードされたjavascriptのものなどについてお気軽にお問い合わせください。
4

1 に答える 1

6

ソースコード内の問題のあるスペース文字はスペース(U + 0020)ではなく、実際にはノーブレークスペース(U + 00A0)であると推測しています。視覚的には同じように見えますが、ソースコードを16進エディター(ファイル内の個々のバイトを表示)で表示すると、これらの文字のエンコードが異なることがわかります。

編集1

このPHPコードは、問題のある文字を見つけて通常のスペースに置き換える必要があります。

$strNoBreakSpace = mb_convert_encoding('&#x00A0;', 'UTF-8', 'HTML-ENTITIES');
$strNormalSpace  = mb_convert_encoding('&#x0020;', 'UTF-8', 'HTML-ENTITIES');

$strInput = str_replace( $strNoBreakSpace, $strNormalSpace, $strInput );

編集2

2つのスペース文字を作成する簡単な方法:

$strNoBreakSpace = json_decode('"\u00A0"');
$strNormalSpace  = json_decode('"\u0020"');
于 2012-12-04T21:09:44.270 に答える