2011-07-28 12 views
0

カスタム:私はこのような何かをしたいタグと値のフォーマット

<my_tag_name> 
text.. 
any_text 
</my_tag_name> 

が、問題は、ユーザがこのようなコンテンツ置いた場合にどのような表示されます:

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

をだから私はと<を置き換えます<「

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であることを思い出しましたが、そこには< div>私のコンテンツ< div> </div>と言うことはできません。

私はまた、このように持っていると思った:

tag: reserved_64_characters 
tag2: reserved_64_characters 

はどのようにこれらの事はXMLで実装されていますか?エスケープ/置き換えもありますか? 私は任意のコンテンツを挿入することができますしたいと思います。私は任意の文字を意味する(また<タグ名> ..)。 CDATAセクションに

http://www.w3schools.com/xml/xml_cdata.asp上の注意:

A CDATAセクションは、文字列を含めることはできません "]]>"

+3

史上最高の柱の一つ:本質的にはhttp://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags :文法のための正規表現を使用しないでください! – SJuan76

+1

+1 "文法に正規表現を使用しない" – Nemoden

答えて

2

あなたはhtmlentitiesでユーザー入力をエスケープする必要があります。それでおしまい。

1

私はあなたを理解していれば、あなたが必要とする正確に何であるCDATAを見てみましょう質問の権利(私は残念なことに疑問に思う)。

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

ので

text.. 
any_text 
</my_tag_name> 

あなたはユーザー入力をスクラブ/解析するPHPのにhtmlentities()またはstrip_tags()を使用することができ、今

+0

ユーザがテキストを挿入するとどうなるか。]]>内容。まだ何らかの方法で置き換える必要があります。 – broadband

0

my_tag_nameの値である...

+0

私はhtmlタグにのみ適用されますが、私自身のタグを持っています。などがあります。あるいは、単にog htmlentities() – broadband

関連する問題