1

次のコードを検討してください。

<div id="sidebar">
<?php
  require_once('/components/search.php');
  require_once('/components/categories.php');
?>
</div>

search.phpcategory.phpは本質的に同じ構造です-いくつかの特定の内容を持つdivコンテナ。ここでは特別なことは何もありません。純粋なHTMLです。

<div class="component">
<!-- blah -->
</div>

ただし、require_once(またはrequire/includeなど)を挿入すると、PHPは各要素の上に空白を追加し、Chromeの要素の検査ツールで空のテキストノードとして識別できるように押し下げます(このノードが削除されると空白は消えます)

サイドバースクリプトから不要な空白をすべて削除して(1行のコードにする)、修正されません。また、行をコンポーネントのコンテンツに置き換えるだけrequire_onceでは、空白は表示されません。したがって、PHPがrequireに追加する理由がわかりません。何か案は?

アップデート

これはまだ奇妙なものであることが証明されています。require_once私は今、それ自体が根本的な原因ではないように思われることに同意します。私はしばらくの間問題を無視することに決めました、そして私がそれをさらに取り組んだ後にそれがなくなることを望みます。残念ながら、それは残っているので、私はもう少し調査しました。ブラウザでページソースをチェックすると、問題のコードが実際に1本の長い途切れのない行として返されることを確認しますhttp://pastebin.com/dtp7QNbs-どのタグの間に空白やキャリッジリターンはありませんが、ブラウザにスペースが表示されます-要素の検査ツールで、それぞれの間の空の行として識別可能<div class="component">

これは、この問題にさらに光を当てるのに役立ちますか?

4

6 に答える 6

4

同じ問題が発生し、フォーマットをANSIに変更するKaiのソリューションを検証しましたが、「BOMなしでUTF-8でエンコードする」も機能することもわかりました。これは、新しいNotepad ++ PHPファイルのデフォルト形式として表示されるため、変換手順が1つ少なくなります。

UTF-8でのバイト順マークファイルヘッダーの使用は、一般的に推奨されていないようです。PHPファイルを保存するときにVS2010のインストールでBOMが追加されていることを確認しました。

次のstackoverflowの記事では、余分な空白が挿入された場所をうまく説明しています。

BOMなしのutf-8とutf-8の違いは何ですか?

于 2013-04-26T22:37:26.447 に答える
2

問題が解決しました!これを理解するのに永遠にかかりました。簡単に言えば、私のphpファイルはUTF-8でエンコードされていたということです。Notepad ++でこれをANSIに変更すると、修正されました。

問題の本当の原因は、出力HTMLの文字ごとの比較を行うことによってのみわかりました。1つは「require_once」が使用された出力で、もう1つはコードが手動で貼り付けられた出力です。

出力の視覚的な比較では、両方が同じように見えました-同じ長さで、余分な/異なる文字はありません。しかし、を押してpreg_split('//', $string)文字ごとにループすると、各require_once挿入ポイントの先頭に3つの余分な「非表示」文字が表示されました。私はこれらをASCII文字&#239;&#187;および&#191;(二重ドットのi、右のシェブロン、および逆さまの疑問符)として識別しました。

エンコーディングをANSIに変更し(メモ帳でスクリプトの1つを単語ごとに再作成したときにこれが原因であることがわかりましたが、同じ問題は発生しませんでした)、余分な行がなくなりました。

于 2013-02-12T13:26:11.417 に答える
2

余分な文字はBOM(バイト順マーク)です。したがって、BOMなしでUTF-8に変換することが、ここでの本当のトリックでした。詳細はこちら: http: //en.wikipedia.org/wiki/Byte_order_mark

于 2014-06-22T11:23:33.390 に答える
1

?>クラスファイルの後、または前に空白が原因で発生したことがあります<?php

于 2017-03-03T13:19:15.530 に答える
0

まず、<?phpDIVと同じ行に配置します。

<div id="sidebar"><?php

これにより、の前の空白が削除されsearch.phpます。

次に、最後に改行がないことを確認します。これにより、とsearch.phpの間の空白が発生します。一部のテキストエディタは、デフォルトで末尾の改行を追加します。これを上書きする必要がある場合があります。search.phpcategories.php

私はこれを試しました。の出力php main.phpは次のとおりです。

<div id="sidebar"><div class="component">
<!-- search.php -->
</div><div class="component">
<!-- categories.php -->
</div></div>
于 2013-02-11T16:02:24.667 に答える
0

以下を使用して、プログラマーのメモ帳エディターでマーク記号なしのUTF-8としてPHPファイルを簡単に保存できます。

  1. ファイル->エンコーディング->UTF-8マークなし
  2. ファイル->保存

その後、requireコマンドには空白を追加せずにPHPスクリプトが含まれます。

于 2021-08-24T14:32:59.250 に答える