これがxmlコードです。このテキストを文字列としてロードし、ネストされたすべてのタグとコンテンツをhtmlentitiesに置き換える必要があります。
<?xml version="1.0" encoding="utf-8"?>
<data>
<target><x id="25e02e3e839c-a1e6b03cb682" pid="NLSheets" name="NLSheets" />Sheets"</target>
<target>"<x id="3510a371bdf8-861b965564ea" pid="NLTable" name="NLTable" />Table"</target>
<target>"<x id="48a1560eaa68-c400c8394f0a" pid="NLCaption" name="NLCaption" />Caption"</target>
</data>
タスクに次のphpコードを使用しました。
function html_entities($matches) {
return str_replace($matches[1], htmlentities($matches[1]), $matches[0]);
}
function get_tag( $tagname, $xml ) {
$pattern = "/<$tagname ?.*>(.*?)<\/$tagname>/";
$content = preg_replace_callback($pattern, html_entities, $xml);
return $content;
}
$content = get_tag('target', $str);
echo $content;
ここで問題は正規表現にあります。正規表現を使用しました
get_tag関数でわかるように。$pattern = "/<$tagname ?.*>(.*?)<\/$tagname>/";
これは実行時に次のように構築されます
/<target ?.*>(.*?)<\/target>
今、私は問題を修正することができません...ネストされたタグの値はhtmlentitiesに変換されません。
助けてください