1

私は次のような機能を持っています:

function replaceXMLEntities($subject) {
 $subject = str_replace("&", "&", $subject);
 $subject = str_replace("'", "'", $subject);
 $subject = str_replace("<", "&lt;", $subject);
 $subject = str_replace(">", "&gt;", $subject);
 $subject = str_replace("\"", "&quot;", $subject);

 return $subject;
}

この関数は、文字列を xmpl エンコーディング用の安全な文字列に変換するために使用されます。

しかし、いくつかのxmplデータが2回エンコードされるという問題があります。

&amp;

入力が到達するにつれて

&&amp;

コードの引用符なしでテキストを入力すると、ここのようになります:)

& と & のようなものを区別できる正規表現が必要です

if not &amp then do & -> &amp; conversion else dont touch it. 

そのような正規表現をどのように達成できるか考えていますか? 関数を作成することもできますが、この場合は明らかに正規表現の方が適しています。

4

4 に答える 4

1

&ampすべての s を&firstに置き換えることで、正規表現なしで同じことを実現できます。

$subject = str_replace("&amp;", "&", $subject);
于 2013-06-27T13:43:34.160 に答える
0

ハードコアな方法:

preg_replace('/&(?!#?[a-z0-9]+;)/', '&amp;', '&amp; & &lt; &gt;');

簡単で正しい方法は を使用することhtmlspecialchars()です。

于 2013-06-27T14:02:45.270 に答える