【问题标题】:Replace something inside CDATA with PHP用 PHP 替换 CDATA 中的某些内容
【发布时间】:2012-09-14 22:29:57
【问题描述】:

我想用 PHP 内的
 替换 chr(10)

<!CDATA[[Text
test
test]]>

但是我的正则表达式很差。

【问题讨论】:

  • 这个很不清楚。能详细解释一下吗?
  • 我有一个 XML。 CDATA 中有不同的节点具有值。在 CDATA 中有“换行符”/“chr(10)”。我想用相应的 HTML 实体“ ”替换这个换行符。
  • 何必呢?它是一个 CDATA 块 - 您不必在 CDATA 块中编码实体。

标签: php regex cdata


【解决方案1】:
$xml = "cc\n<!CDATA[[Text\ntest\ntest]]>\naa\nbb\n";
$callback = function($m) {
    return '<!CDATA[[' . preg_replace("~" . chr(10) . "~s", '&#xA;', $m[1]) . ']]>';
};
echo preg_replace_callback('~<!CDATA\[\[(.+?)\]\]>~s', $callback, $xml);

附言你可能不用 preg_replace_callback 就可以做到,但它看起来比将所有逻辑都放入 preg_replace...

【讨论】:

    【解决方案2】:

    为什么要使用正则表达式?

    $final = str_replace( chr(10), '&#xA;', $cdata );
    

    【讨论】:

    • 我有一个带有不同节点的洞 XML,其值在 CDATA 中。在 CDATA 中有“换行符”/“chr(10)”。我想用相应的 HTML 实体“ ”替换这个换行符。
    • 你如何解析这个提要?遍历节点并在每个节点上使用我上面的 sn-p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2012-07-29
    • 2013-11-13
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多