2016-08-20 8 views
1

私は "マナーフレンドリー"なウェブサイトを作ろうとしています。私たちは性別やその他の要因に応じて異なる偏差を使います。例:PHPでオリジナルのhtmlテキストを変更することはできますか?

You did = robili 
It did = robilo 
She did = robila 

これは非常に単純化された不運な例です。私は、適切な場合は、PHPファイルのhtmlテキストを変更したいと思います。例

<? php 
something 
?> 

html text of the page and somewhere is the word "robil" 
<div>we tried to robil^i|o|a^</div> 

<? php something ?> 

のために今、私は^ 文字を異なるトークンのすべての出現箇所を置換したいです| 文字 | 文字「 ^」を「性別」に従って内部値の1つに置き換えます。

クライアント側のjavascriptでは簡単ですが、javascriptを置き換える前に、この奇妙な "トークン化"がすべて表示されます。 ここで私は優雅な解決策を知らない。

それとも良いアイデアはありますか?

ありがとうございました。

+0

あなたは私たちにすべての詳細を与えていない。文字は常に同じですか、それとも単語ごとに変わりますか?フォームを選択するのに常に3つの文字がありますか?などとにかく、これはPHPで非常に簡単にする必要があります、あなたはこれ以上の基本を得ることはできません。 –

+0

Twigを見てください。それは多くを助けるでしょう – jaro1989

+0

@KIKOSoftwareこれのような多くの言葉がありますが(確かにそれらのほとんどではありません)、それらは異なる偏差の規則を持っているので、全文を手動で編集し、これらのトークンを追加する必要があります:^ si | sa | ste ^、^ mal | mala | malo ^など...必要な場所。 私の懸念は、これを変更する別のPHPヘルパーファイルを使用せずに、PHPファイル内のhtmlテキストを変更することです。 – lyborko

答えて

2

あなたは、HTMLの前と後に、これらのスクリプトを追加することができます。

<?php 

// start output buffering 
ob_start(); 

?> 
<html> 
<body> 
html text of the page and somewhere is the word "robil" 
<div>we tried to robil^i|o|a^, but also vital^si|sa|ste^, borko^mal|mala|malo^ </div> 
</body> 
</html> 
<?php 

$use = 1; // indicate which declination to use (0,1 or 2) 

// get buffered html 
$html = ob_get_contents(); 
ob_end_clean(); 

// match anything between '^' than's not a control chr or '^', min 5 and max 20 chrs. 
if (preg_match_all('/\^[^[:cntrl:]\^]{3,20}\^/',$html,$matches)) 
{ 
    // replace all 
    foreach (array_unique($matches[0]) as $match) 
    { 
    $choices = explode('|',trim($match,'^')); 
    $html = str_replace($match,$choices[$use],$html); 
    } 
} 

echo $html; 

これが返されます。どこか

htmlページのテキストとは、我々は robiloしようとした「robil」という言葉で、しかし、また、vitalsa、borkomala

+0

通常、正規表現は読みにくいので好きではありませんが、ここで使うのが一番簡単です。正規表現が何を参照するかを知るには:https://regex101.com正規表現を使用せずに同じことを達成できます。ちょっとだけコードが必要になりますし、少し遅くなるかもしれません。 –

+0

あなたはとても素敵です。あなたの答えをありがとう。重大な問題は、元のHTMLを文字列に入れることが唯一の方法である場合です。それはHTMLではなく、文字列自体です:-(。 元のhtml/phpファイル(simple_html_dom.phpを使用)を変更するローダーPHPスクリプトを作成することを考えていましたが、オーバーヘッドです... – lyborko

+0

出力バッファリングですべてのhtml出力をバッファリングできます:http://php.net /manual/ja/ref.outcontrol.phpページの最後にPHPスクリプトを追加し、HTMLを処理してクライアントに送信します。それに応じてスクリプトを修正します。 –

関連する問題