自定义标记值格式

时间:2011-07-28 07:44:19

标签: php regex tags format

我想做这样的事情:

<my_tag_name>
text..
any_text
</my_tag_name>

但如果用户放置如下内容,问题就出现了:

<my_tag_name>
text..
any_text
</my_tag_name>
</my_tag_name>

所以我更换了&lt;与&lt;'

function content($string, $tagname)
{
 $pattern = "/<$tagname>([\w\W]*?)<\/$tagname>/";
 $preg_match($pattern, $string, $matches);
 return str_replace("<'", "<", $matches[1]);
}

function replace($string)
{
  return str_replace("<", "<'", $string);  
}

目标是将自定义标记和任何类型的文本作为内容。这是正确的方法吗?我尝试了它,它的工作原理。但后来我再次记得同样的原则是在html但你不能放开让我们说&lt; DIV&GT;我的内容&lt; DIV&GT; &LT; /格取代。

我也想这样:

tag: reserved_64_characters
tag2: reserved_64_characters

如何在XML中实现这些功能?还有一些逃脱/替换。 我想这样做可以插入任何内容我的意思是任何字符(也是&lt; tag_name&gt; ..)。

http://www.w3schools.com/xml/xml_cdata.asp

关于CDATA部分的说明:

CDATA部分不能包含字符串“]]&gt;”

3 个答案:

答案 0 :(得分:2)

您应该使用htmlentities转义用户输入。就是这样。

答案 1 :(得分:1)

如果我理解你的问题(不幸的是,我怀疑),请查看CDATA这正是你所需要的。

<my_tag_name>
<![CDATA[text..
any_text
</my_tag_name>]]>
</my_tag_name>

所以

text..
any_text
</my_tag_name>

现在是my_tag_name

的值

答案 2 :(得分:0)

你可以使用php的htmlentities()或strip_tags()来解析/擦除用户输入......