我正在尝试使用php将此ORIGINAL字符串转换为RESULT。
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);
这导致快速的棕色狐狸跳过懒狗,
其次,我颠倒了结果和'#34; brown&#34;通过使用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 revo spmuj xof kciuq ehT ,与结果不同。
看起来font()标签中的特殊字符可能是阻止str_replace替换String的问题。
$result = str_replace($brown, "TEST", $reverseStr);
echo "result -->" . $result . "<br/><br/><br/>";
这导致上帝yzal eht revo spmuj xof TEST kciuq ehT
有谁知道str_replace不接受特殊字符?并知道我应该如何解决这个问题?
如果有其他方法可以解决问题,我也将不胜感激听取您的建议。
(*这是我在算法测试网站中试图解决的一个实际问题)
更新:我觉得愚蠢到认为字体标签在哪里。由于标签旨在改变字体颜色,因此它在开始时工作得很好。非常感谢大家的时间!
答案 0 :(得分: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;
答案 1 :(得分:1)
使用能为您提供DOM API的内容解析HTML。
编写一个循环遍历元素子节点的函数。
如果节点是文本节点,请将数据作为字符串获取,将其拆分为单词,将每个单词反转,然后将其分配回来。
如果某个节点是一个元素,请递归到您的函数中。
答案 2 :(得分: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);