2017-08-25 59 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);