【问题标题】:How can I use str_replace with array for multiple items?如何将 str_replace 与数组一起用于多个项目?
【发布时间】:2016-02-09 07:19:08
【问题描述】:

我有这个代码:

libxml_use_internal_errors(TRUE);
    $dom = new DOMDocument;
    $dom->Load('/home/dom/public_html/cache/feed.xml');
    $xmlor = '/home/dom/public_html/cache/feed.xml';

    // open file and prepare mods
    $fh = fopen($xmlor, 'r+');
    $data = fread($fh, filesize($xmlor));
    $dmca_claim_jpg = array( 'baduser_.jpg','user78.jpg' );
    $dmca_claim_link = array( 'mydomain.com/baduser_','mydomain.com/user78' );
    echo "Opening local XML for edit..." . PHP_EOL;
    $new_data = str_replace("extdomain.com", "mydomain.com", $data);
    $new_data2 = str_replace($dmca_claim_jpg, "DMCA.jpg", $data);
    $new_data3 = str_replace($dmca_claim_link, "#", $data);
    fclose($fh);

    // run mods
    $fh = fopen($xmlor, 'r+');
    fwrite($fh, $new_data);
    fwrite($fh, $new_data2);
    fwrite($fh, $new_data3);
    echo "Updated feed URL and DMCA claims in local XML..." . PHP_EOL;
    fclose($fh);

它在执行时不会给出任何错误,但在将$new_data2 和$new_data3 写入 xml 文件时删除前两行(奇怪)会弄乱 xml 文件。

只写$new_data...

我认为这与$dmca_claim_jpg/link 数组有关。

【问题讨论】:

  • 这可能是$dmca_claim_jpg 和$dmca_claim_link 的问题吗?
  • 是的,我相信是的。我似乎无法修复它
  • 你能放一个你的xml样本吗?
  • 您真的想要生成的文件中有 3 个 XML 副本,每个副本都有不同的替换吗?
  • 如果你只是从文件中读取,你应该使用fopen模式r,如果你正在覆盖文件,你应该使用w。为什么在这两种情况下都使用r+?

标签: php arrays xml str-replace


【解决方案1】:

使用 SimpleXML 或 DOMDocument 解析 XML,这样更简洁,并且您拥有访问节点的标准 OOP 方式

【讨论】:

  • 对不起,我有,只是忘记粘贴了。我刚刚编辑了代码并添加了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
相关资源
最近更新 更多