0

私は現在、スマートな出力フィルターを使用して、Web サイト内の特定の文字列 (html を含む) を動的に置き換える置換ツールに取り組んでいます。

置換を行うために、PHP のstr_ireplaceメソッドを使用しています。このメソッドは、置換されるはずのコードと置換コードをデータベースから読み取り、その結果を (出力フィルターを使用して) smarty 出力に渡します。以下のように。

$tpl_source = str_ireplace($replacements['sourceHTML'], $replacements['replacementHTML'], $tpl_source);  

問題は、私の開発サーバーでは問題なく動作しますが、ライブサーバーにアップロードすると、置換が失敗することがあるということです。ただし、同じ置換は私の開発バージョンでも問題なく機能します。いくつかの調査とグーグル検索の後、この問題に関して私が知ることができることはあまりありませんでした. 私の質問は、 の動作に影響を与える可能性str_replaceのあるものは何ですか?

ありがとう

置換例で編集:

$htmlsource = file_get_contents('somefile.html');
$newstr = str_replace('<a href="http://www.somelink">Some text</a>', 'sometext', $htmlsource);  // the text to be replaced does exist in the html source

交換に失敗します。確認したところ、">の組み合わせで問題が発生しているように見えます。しかし、組み合わせだけです。(")のみを変更しようとすると機能し、(>)のみを変更しようとすると機能します。

4

3 に答える 3

0

str_replace()置き換えたい文字列内に特別な文字がある場合、ウムラウトのような特別な文字がライブサーバーに正しく表示されず、失敗する可能性があります。

于 2012-08-10T11:30:14.383 に答える
0

入力文字列は両方のシステムで同じですか? これを確認しましたか?本気ですか?

確認事項:

  • HTML 属性は同じ順序ですか?
  • 属性値は同じ種類の引用符を使用していますか? (例<a href='#'>vs <a href="#">)
  • そこに入っている他の浮遊 HTML コードはありますか?
  • エンティティのエンコーディングは同じですか? (例: &nbsp;vs &#160;- 同じ文字; 異なる HTML)
  • 文字セットは同じですか?(例: utf-8 と ISO 8859-1 では、アクセント付きの文字は異なる方法でエンコードされます)

これらのいずれかが結果に影響を与え、説明している失敗を引き起こします。

于 2012-08-10T11:40:14.370 に答える
0

これはトリッキーな問題であり、str_replace メソッド自体とは何の関係もありませんでした。

タンプラーシステムとしてsmartyを使用しています。str_replace メソッドは、html がユーザーに配信される直前に、いくつかの機会に html を変更するために、賢い出力フィルターによって使用されました。

Smarty outputfilter コードは次のとおりです。

function smarty_outputfilter_replace($tpl_source, &$smarty)
{
    $replacements = Content::getReplacementsForPage();
    if (is_array($replacements))
    {
        foreach ($replacements as $replacementData)
        {
            $tpl_source = str_replace($replacementData['sourcecode'], $replacementData['replacementcode'], $tpl_source);
        }
    }
    return ($tpl_source);
}

したがって、このコードはときどき失敗しましたが、これは明らかな理由でした... smarty テンプレートの HTML コードが Apache フィルターによって操作されていることに気付くまでは。

これにより、ブラウザーのソース コード (別のものに置き換えるコードとして使用していたもの) が、テンプレート コード (smarty が変更しようとしていたもの) と同一ではなくなりました。結果?str_replace に失敗しました:)

于 2012-09-12T16:01:04.963 に答える