2012-03-23 2 views
2

RTLの方向テンプレートで使用する必要があるCSSファイルがあります。 PHPと正規表現を使用して、これらのCSSファイルの左から右に、すべて右から左に変換する必要があります。左に右と左を代用する正規表現が必要です

たとえば、「margin-left」と表示されている場合は「margin-right」、その逆の場合は、

+3

へ必要がありますか?テキストエディタを使用して置き換えても簡単です – Alex

+0

RTLユーザーの場合にのみ置き換える必要があるためですか? – 472084

+0

変更するCSSファイルがたくさんあるので、後で使用するスクリプトを作成したいからです。プラスあなたは本当に10 cssファイルのすべての左右を通過する時間がありますか? – alhoseany

答えて

4

それを行うための簡単な方法は、に次のようになります。

$rtl = str_replace('left', '{left}', $css); 
$rtl = str_replace('right', '{right}', $rtl); 
$rtl = str_replace(array('{left}', '{right}'), array('right', 'left'), $rtl); 

大きな問題CSSのこれらの種類があります:

margin: 0 5px 0 10px; 

もっと大きな問題:

box-shadow: inset 3px 4px 32px black, 2px 3px 2px white 

あなたべきどのような種類のCSSが発生する可能性があるかを明確にします。私は単にleftともposition: absolute位置決め値をサポートする権利と同じに-leftを置き換え :私はあなたが本格的なCSSパーサに

EDITを書きたいとは思いません。

+0

それは動作していません、それは右から左に変換しますが、左から右に変換しません。このコードをチェックしてください: <?php $ file = '.logo { float:right; margin-left:30px; } '; $ source = array( 'left'、 'right'); $ target = array( 'right'、 'left'); $ rtl = str_replace($ source、$ target、$ file); echo $ rtl; ?> – alhoseany

+0

私は、左から右に1つずつ切り替えた後に(左、右) - >(右、左)のような配列として値を与え、2番目の置換を続けると、しかし、彼はそうしたので、すべての権利は左に残った。ありがとうございます。 – SinistraD

+0

今働く。 – alhoseany

1

これは、PHPでそれを行う理由トリック

preg_replace_callback('/(.+)\-(left|right)/i', function($match) { return $match[1].'-'.($match[2] == 'left' ? 'right' : 'left'); }, $str); 
+0

正規表現で作成した場合、a:とa/nの順方向ルックアップを行う必要があります。この方法で、background:url(picture-left.png)のような値を置き換えることはできません。私は '左:'と '左:'と '左\ t:'はすべて有効なCSSだから、私の答えではしなかった – SinistraD

+0

あなたは完全に正しいです。 –

関連する問題