反转字符串中除 HTML 标签之外的所有可见字符

问题描述 投票:0回答:3

我正在尝试使用 php 将这个原始字符串转换为下面的结果。

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");

这结果是上帝 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替换字符串的问题。

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

这结果是上帝 yzal eht revo spmuj xof TEST kciuq ehT

有谁知道 str_replace 不接受特殊字符?并知道我应该如何解决这个问题?

如果有其他方法可以解决问题,我也将不胜感激听到您的建议。

(*这是我试图在算法测试网站中解决的实际问题之一)

更新:我觉得字体标签在哪里真是太愚蠢了。由于标签是用来改变字体颜色的,所以一开始它工作得很好。非常感谢大家抽出宝贵的时间!

php string replace
3个回答
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
投票

使用可以为您提供 DOM API 的内容解析 HTML。

编写一个循环遍历元素的子节点的函数。

如果节点是文本节点,则将数据作为字符串获取,将其拆分为单词,反转每个节点,然后将其分配回来。

如果节点是元素,请递归到您的函数中。


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);
© www.soinside.com 2019 - 2024. All rights reserved.