2017-08-25 8 views
3

私は、このORIGINAL文字列をPHPを使用して以下のRESULTに変換しようとしています。php str_replace関数の問題

ORIGINAL: "The quick <font color="brown">brown</font> fox jumps over the lazy dog" 

RESULT:"god yzal eht revo spmuj xof <font color="brown">nworb</font> kciuq ehT" 

これまでの説明は以下のとおりです。

まず、HTMLタグをオリジナルから取り除きます。

$originalStr = "The quick <font color='brown'>brown</font> fox jumps over the lazy dog"; 

$stripTags = strip_tags($originalStr); 

これは、迅速な茶色のキツネになり怠惰な犬の上にジャンプし、

第二に、私はstrrev機能

$reverseStr = strrev($stripTags); 
$brown = strrev("brown"); 

を使用して、「ブラウン」の結果と単語を逆にこれは、結果として得られる結果となる。

第3に、私はstr_replace関数を使用してreverseStrから$ brownを探し、$ openFont $ brown $ closeFontに置き換えようとしています。

$openFont = "<font color='brown'>"; 
$closeFont = "</font>"; 

$result = str_replace($brown, $openFont.$brown.$closeFont, $reverseStr); 
echo "result -->" . $result . "<br/><br/><br/>"; 

これは神に結果yzal EHT spmuj XOF kciuq EHT、結果として同じではありませんREVO。

font()タグの特殊文字のように、文字列を置き換えるstr_replaceをブロックしている可能性があります。

$result = str_replace($brown, "TEST", $reverseStr); 
echo "result -->" . $result . "<br/><br/><br/>"; 

これはyzal EHT REVO spmuj XOFテストkciuq EHT

は誰もが知っていstr_replaceに特殊文字を受け付けていません神に結果?私はこの問題をどのように解決すべきかを知っていますか?

問題を解決する別の方法がある場合は、私もあなたの提案を聞いていただければ幸いです。

(*これは私がアルゴリズムテストのウェブサイトで解決しようとしています実用的な質問の一つである)

更新日:私は、フォントタグがあった場所と考えるのはとてもダム感じます。タグはフォントの色を変更するためのものなので、最初は完全に機能していました。皆さんありがとうございました!

+0

特殊文字が最終結果とは何の関係もないはずです。 '$ openFont =" "; $ closeFont = ""; $ brown = strrev( "brown"); $ reverseStr = 'god yzal eht revo spmuj xof nworb kciuq ehT'; $ result = str_replace($ brown、$ openFont。$ brown。$ closeFont、$ reverseStr);は完璧に動作します。この前にコードに他に間違いがないことを確認してください。 '$ reverseStr;'変数を宣言します。 – Aydin4ik

+0

完璧な作業:https://eval.in/850081 –

+0

これは面白い就職面談ホワイトボードの質問の1つのような感じです – Phil

答えて

1

HTMLにDOM APIを与えるものを構文解析します。

要素の子ノードをループする関数を記述します。

ノードがテキストノードの場合は、データを文字列として取得し、単語で分割し、それぞれを逆にしてから戻します。

ノードが要素の場合は、関数に再帰します。

2

それは私だった場合、私はこれを行うと思います(完全にテスト):変数に

// Original string 
$str = 'The quick <font color="brown">brown</font> fox jumps over the lazy dog'; 

// Strip the font tag 
$str = strip_tags($str); 

// Convert string to array 
$arr = str_split($str); 

// Reverse the array 
$rra = array_reverse($arr); 

// Convert array back to string 
$str = implode($rra); 

// Add font tag back in 
$str = str_replace('nworb', '<font color="brown">nworb</font>', $str); 


// Result 
echo $str; 
+0

私はもう一度やり直す必要があります。私の頭の中に飛び込むそれだけで約2分を費やした。より興味深い問題は、タイプと数量の両方で未知のタグを持つ文字列を逆にすることです。 –

+0

どのように未知のタグで文字列を逆にしますか?もっと興味深いのは、ユーザーがフォントの色を変更したり、別のHTMLタグを使用したりする場合です。 タグをハードコーディングし、それを変数に入れるのは最良の答えではありません。あなたは思いませんか?この場合、正規表現を使用して '<'で始まり '>'で終わる文字列を取得し、それを変数に入れるべきだと思いますか? –

+0

はい、正規表現です。 '
'タグ、またはランダムな ''タグがあればどうなるか想像してみてください。それはかなり難しいかもしれません。 –

0
Use preg_match_all() function. 
$originalStr = "The quick <font color='brown'>brown</font> fox jumps over the lazy dog"; 
preg_match_all('|<[^>]+>(.*)</[^>]+>|U', $originalStr, $matches, PREG_SET_ORDER, 0); 
$_tag = $matches[0][0]; 
$_txt = $matches[0][1]; 
$newString = str_replace($_tag,$_txt,$originalStr);