关于正则表达式和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>");
,但仍未能删除标签。
答案 0 :(得分:1)
您的错误在服务器代码中。从readfile
上的PHP手册:读取文件并将其写入输出缓冲区。 [...]返回从文件中读取的字节数。
您将XML的长度存储在$ xdef中,而不是字符串内容中。使用file_get_contents
代替readfile
,您就可以了。没有用于(实际上非常复杂的)客户端更正。