2017-08-25 122 views
3

我想這個原始字符串轉換爲使用PHP下面的結果。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" 

我到目前爲止所做的工作如下所述。

首先,剝離ORIGINAL中的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"); 

這導致神yzal eht revo spmuj xof nworb kciuq ehT

第三,我我試圖用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,不一樣的結果。

看起來好像在font()標記中的特殊字符是可能阻止str_replace替換String的問題。

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

這導致上帝yzal EHT雷沃spmuj XOF TEST 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

這感覺就像其中一個可怕的工作面試白板問題 – 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);