在JavaScript中使用正则表达式减少多个br标签

时间:2015-12-06 15:50:37

标签: php regex xml

关于正则表达式和br标签,有很多关于SO的问题;不幸的是,他们都没有解决这个问题。是的,我确实需要查找超过2个<br>的每次出现,而中间没有任何文本,并将它们简化为2.然而,在我的情况下,标签在技术上并不总是连续的。它们之间可能还有其他打开/关闭标记。这是一个例子:

<xyz>
<abc>blah blah blah</abc>
<br>
</xyz>
<br>
<br>
<ynt>
<br>
<abc>some more text here</abc>

在此示例中,虽然连续出现两个以上<br>个标记并不重要,但在浏览器中呈现时,仍会保留4个连续<br>标记的效果。这是我想要解决的那种情况。我想尝试一些东西,但不知道哪里开始!如何在两个<br>标记之间标记无限数量的标记,同时忽略任何非标记文本?我不是要求手工喂养......只是在正确的方向上提示会很棒。

为了简化过程,我尝试在服务器上处理此问题,方法是从用于检索XML的PHP​​中删除文本中的<br>的所有实例。这是PHP代码:

<?php

// This function grabs the definition of a word in XML format.
function grab_xml_definition ($word, $ref, $key)
    {   $uri = "http://www.dictionaryapi.com/api/v1/references/" . urlencode($ref) . "/xml/" . 
                    urlencode($word) . "?key=" . urlencode($key);
        return readfile($uri);
    };

$xdef = grab_xml_definition($_POST['lookup_word'], "spanish", "6d4d41f9-c28f-4544-9bb3-1b4708d1a4d1");
$xdef = str_ireplace("<br>", "", $xdef);
echo $xdef;

?>

我用了一个简单的str_ireplace()来完成工作;但是,标签保持不变。即使是preg_replace("#<br>#", "", $xdef);也没有做到这一点!

PS:刚刚在我的PHP中尝试了strip_tags($xdef,"<br>");,但仍未能删除标签。

1 个答案:

答案 0 :(得分:1)

您的错误在服务器代码中。从readfile上的PHP手册:读取文件并将其写入输出缓冲区。 [...]返回从文件中读取的字节数。

您将XML的长度存储在$ xdef中,而不是字符串内容中。使用file_get_contents代替readfile,您就可以了。没有用于(实际上非​​常复杂的)客户端更正。