これらの文字列をHTMLタグに、またはその逆に変換する方法はありますか?
例:
$str = 'The^ff0000 quick brown^000000 fox jumps over the lazy dog.'
出力は
The<span style="color:#ff0000;"> quick brown</span> fox jumps over the lazy dog.
そのようなものとその逆
いくつかの特定のコードについて話しているだけの場合は、次を使用できます。
$str = "The^ff0000 quick brown^000000 fox jumps over the lazy dog.";
$str = str_replace('^ff0000', '<span style="color:#ff0000;">', $str);
$str = str_replace('^000000', '</span>', $str);
または必要に応じて:
$str = "The^ff0000 quick brown^000000 fox jumps over the lazy dog.";
$str = str_replace(array('^ff0000', '^000000'), array('<span style="color:#ff0000;">', '</span>'), $str);
任意の数のカラーコードを許可する場合は、次のようにします。
$str = str_replace('^000000', '</span>', $str);
$str = preg_replace('@\^([a-f\d]{6})@i', '<span style="color:#$1;">', $str);
逆変換の場合(他</span>
のを使用していない場合)、次のようになります。
$str = str_replace('</span>', '^000000', $str);
$str = preg_replace('@<span style="color:#([a-fA-F\d]{6});">@', '^$1', $str);
<span>
これは、空白を変更せずに、上記とまったく同じように入力していることを前提としていることに注意してください。
実際の終了タグがなく、^ 000000でスパン終了タグを表したいので、以下でマイクの回答を拡張します。
$string = "The^ff0000 quick brown^000000 fox jumps over the lazy dog.";
// replace '^000000' first so we don't get false positives in the regex
$new_string = str_replace('^000000', '</span>', $string);
$new_string = preg_replace('/\^([0-9a-fA-F]+)\b/i', '<span style="color: #$1;">', $new_string);
^(非000000)値が常に開始スパンタグを表し、16進値がカラースタイルであり、^ 000000が常に終了スパンタグを意味する場合は、単純な文字列置換です。
これは、デコレータパターンを実装する必要がある良い例です(例:静的メソッドを作成し、たとえばexplodeを使用して文字列を処理し、スパンを追加します)