【问题标题】:Large position replace using PHP string replace使用 PHP 字符串替换的大位置替换
【发布时间】:2021-12-30 17:55:24
【问题描述】:

从外部网站字符串中替换代码位置很容易,但是当它比我们大的时候我们如何替换它呢?

我想从 example.com 替换的代码:

<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script nonce="d5951f1b7cde348759b0310ef405830a">
  window.RETROVISION = {
    "homepage": {
      "__render-farm": {"navi":{"variation":"logged_out","darwin":{"mono.corePages_indexController_transactionAccounts":false,"mono.navigation_web_moneyCenterTab":true,"mono.navigation_web_hideMyRecsBadge":false,"mono.taxhub_enabled":true,"mono.enableCardsInWallet":false,"mono.should_show_ciw_in_nav_cc_dropdown":false,"mono.tax_navbar_inseason":false,"mono.navigation_web_nativeUpsell":"control","mono.tax_hub_holdout":true,"autos.purchase_offers_navi_url_enabled":true,"js.cardsInWallet_holdout":false,"js.navi_voter_roadmap_isEnabled":false,"js.navi_voter_roadmap_text":"Voter\x20Roadmap","js.reliefCenter_navbar_badge_text":"control","js.useNewLoginNavi":false,"savings.navbar_enabled":true,"mortgage.l1_link_in_authed_navi":true,"mortgage.l1_link_in_unauthed_navi":true,"savings.checking_be_eligibility_flag_v2":true,"savings.billpay_eligible":true,"mortgage.mweb_navi_new_dashboard_link":"new","coreProduct.dweb_stickyTopEnabled":false,"portals.reliefCenter_isEnabled":true,"portals.tax_nav_redirect_enabled":false,"portals.tax_surface_eligibility_unauth":true,"mono.tax_navbar_badge_text":"control","mono.tax_unauth_navbar_badge_text":"","navigation":{"web":{"isMobile":false}}},"version":"10.32.0","moduleName":"navi","bundleName":"navi-inline-retrovision.bundle.js","nonce":{"script":"d5951f1b7cde348759b0310ef405830a"}},"darwin":{"mono":{"homepage_version":"b","homepage_enable_criticalCss":true,"homepage_section_1":"kc_cc_pl_v1","homepage_section_2":"v1","homepage_section_3":"money","homepage_section_4":"v1","homepage_section_5":"v1","homepage_section_6":"v1","homepage_section_7":"v1","homepage_section_8":"v1","homepage_section_9":"v1"}},"navigation-web":{"darwin":{"coreProduct.scooter_mweb_notificationCenterEnabled":true,"coreProduct.scooter_dweb_navPlacement":"top","coreProduct.scooter_dweb_navCopy":"scooter","mono.tax_navbar_badge_text":"control","coreProduct.scooter_mweb_newNavIconsEnabled":false,"coreProduct.scooter_dweb_myRecsEnabled":false,"coreProduct.scooter_dweb_myRecsBadgeEnabled":false,"coreProduct.scooter_dweb_autoHomeEnabled":false},"platformInfo":{"platform":"Web","osType":null},"nonce":"d5951f1b7cde348759b0310ef405830a"},"ckRawTracker":{"enabled":true,"url":"https:\x2F\x2Fcreditkarmacdn-a.akamaihd.net\x2Fres\x2Fcontent\x2Fbundles\x2Fcfwk_raw-tracker-web\x2F2.8.1\x2Findex.js","hash":"sha384-LIWRu\x2Fm\x2FCPYkQvDB\x2B6CsmuSqzmdqkZg5VJavhsyvLG1Ly2iXMcOcy8TnMRV65K0O"},"footer":{"darwin":{"mono.geolocation":"hide"},"version":"4.9.8","moduleName":"footer","bundleName":"footer-retrovision.bundle.js","nonce":"d5951f1b7cde348759b0310ef405830a","location":{"country":"US","continent":"NA","subdivision":"OH","zipCode":"43215"},"domain":"US"},"zipkin":{"enabled":false},"request":{"tokens":{"accessToken":false,"refreshToken":false},"cookieId":"6AA3886FD63D41C9B5E1933E22065C85","params":{},"path":"\x2F","fullPath":"https:\x2F\x2Fwww.creditkarma.gq\x2F","traceId":"3234806a-8570-4eec-bace-c58e2b462102"},"isScooter":false,"geoipData":{"country":"US","continent":"NA","subdivision":"OH","zipCode":"43215"},"nonce":"d5951f1b7cde348759b0310ef405830a","platformInfo":{"platform":"Web","osType":null}}
    }
  };
</script>

我想替换整个代码

我的代码:

$cloudflare = '<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script nonce="d5951f1b7cde348759b0310ef405830a">
  window.RETROVISION = {
    "homepage": {
      "__render-farm": {"navi":{"variation":"logged_out","darwin":{"mono.corePages_indexController_transactionAccounts":false,"mono.navigation_web_moneyCenterTab":true,"mono.navigation_web_hideMyRecsBadge":false,"mono.taxhub_enabled":true,"mono.enableCardsInWallet":false,"mono.should_show_ciw_in_nav_cc_dropdown":false,"mono.tax_navbar_inseason":false,"mono.navigation_web_nativeUpsell":"control","mono.tax_hub_holdout":true,"autos.purchase_offers_navi_url_enabled":true,"js.cardsInWallet_holdout":false,"js.navi_voter_roadmap_isEnabled":false,"js.navi_voter_roadmap_text":"Voter\x20Roadmap","js.reliefCenter_navbar_badge_text":"control","js.useNewLoginNavi":false,"savings.navbar_enabled":true,"mortgage.l1_link_in_authed_navi":true,"mortgage.l1_link_in_unauthed_navi":true,"savings.checking_be_eligibility_flag_v2":true,"savings.billpay_eligible":true,"mortgage.mweb_navi_new_dashboard_link":"new","coreProduct.dweb_stickyTopEnabled":false,"portals.reliefCenter_isEnabled":true,"portals.tax_nav_redirect_enabled":false,"portals.tax_surface_eligibility_unauth":true,"mono.tax_navbar_badge_text":"control","mono.tax_unauth_navbar_badge_text":"","navigation":{"web":{"isMobile":false}}},"version":"10.32.0","moduleName":"navi","bundleName":"navi-inline-retrovision.bundle.js","nonce":{"script":"d5951f1b7cde348759b0310ef405830a"}},"darwin":{"mono":{"homepage_version":"b","homepage_enable_criticalCss":true,"homepage_section_1":"kc_cc_pl_v1","homepage_section_2":"v1","homepage_section_3":"money","homepage_section_4":"v1","homepage_section_5":"v1","homepage_section_6":"v1","homepage_section_7":"v1","homepage_section_8":"v1","homepage_section_9":"v1"}},"navigation-web":{"darwin":{"coreProduct.scooter_mweb_notificationCenterEnabled":true,"coreProduct.scooter_dweb_navPlacement":"top","coreProduct.scooter_dweb_navCopy":"scooter","mono.tax_navbar_badge_text":"control","coreProduct.scooter_mweb_newNavIconsEnabled":false,"coreProduct.scooter_dweb_myRecsEnabled":false,"coreProduct.scooter_dweb_myRecsBadgeEnabled":false,"coreProduct.scooter_dweb_autoHomeEnabled":false},"platformInfo":{"platform":"Web","osType":null},"nonce":"d5951f1b7cde348759b0310ef405830a"},"ckRawTracker":{"enabled":true,"url":"https:\x2F\x2Fcreditkarmacdn-a.akamaihd.net\x2Fres\x2Fcontent\x2Fbundles\x2Fcfwk_raw-tracker-web\x2F2.8.1\x2Findex.js","hash":"sha384-LIWRu\x2Fm\x2FCPYkQvDB\x2B6CsmuSqzmdqkZg5VJavhsyvLG1Ly2iXMcOcy8TnMRV65K0O"},"footer":{"darwin":{"mono.geolocation":"hide"},"version":"4.9.8","moduleName":"footer","bundleName":"footer-retrovision.bundle.js","nonce":"d5951f1b7cde348759b0310ef405830a","location":{"country":"US","continent":"NA","subdivision":"OH","zipCode":"43215"},"domain":"US"},"zipkin":{"enabled":false},"request":{"tokens":{"accessToken":false,"refreshToken":false},"cookieId":"6AA3886FD63D41C9B5E1933E22065C85","params":{},"path":"\x2F","fullPath":"https:\x2F\x2Fwww.creditkarma.gq\x2F","traceId":"3234806a-8570-4eec-bace-c58e2b462102"},"isScooter":false,"geoipData":{"country":"US","continent":"NA","subdivision":"OH","zipCode":"43215"},"nonce":"d5951f1b7cde348759b0310ef405830a","platformInfo":{"platform":"Web","osType":null}}
    }
  };
</script>'
$homepage = file_get_contents("https://www.example.com");
$homepage = str_replace($cloudflare, "hello", $homepage);
echo $homepage;

可以这样替换吗?

$homepage = str_replace('<script data-cfasync=\***/</script>', "hello", $homepage);

【问题讨论】:

  • 使用正则表达式3v4l.org/Y8lBH
  • 5c5dd728 将是一个构建哈希/版本,因此它很可能会改变
  • (.*?) 将匹配除换行符之外的所有内容,因此不能使用它来代替 ([^&lt;]*),后者匹配除以 &lt; 开头的所有内容以外的所有内容,这是最后一个 &lt;/script&gt; 的开头
  • np,愉快的报废;p
  • 是的,您的正则表达式无效,它需要包含在有效的包装器中,即/# 等(不确定它叫什么),然后您需要删除?当您的捕获结束时,您还需要转义?,因为它意味着一些东西。即3v4l.org/pifGu

标签: javascript php html str-replace file-get-contents


【解决方案1】:

感谢@LawrenceCherone 的解决方案。

完整代码:

<?php
$str = 'foo 
<script src="something/else1.js"></script>

<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script nonce="d5951f1b7cde348759b0310ef405830a">
  window.RETROVISION = {
    "homepage": {
      "__render-farm": {"navi":{"variation":"logged_out","darwin":{"mono.corePages_indexController_transactionAccounts":false,"mono.navigation_web_moneyCenterTab":true,"mono.navigation_web_hideMyRecsBadge":false,"mono.taxhub_enabled":true,"mono.enableCardsInWallet":false,"mono.should_show_ciw_in_nav_cc_dropdown":false,"mono.tax_navbar_inseason":false,"mono.navigation_web_nativeUpsell":"control","mono.tax_hub_holdout":true,"autos.purchase_offers_navi_url_enabled":true,"js.cardsInWallet_holdout":false,"js.navi_voter_roadmap_isEnabled":false,"js.navi_voter_roadmap_text":"Voter\x20Roadmap","js.reliefCenter_navbar_badge_text":"control","js.useNewLoginNavi":false,"savings.navbar_enabled":true,"mortgage.l1_link_in_authed_navi":true,"mortgage.l1_link_in_unauthed_navi":true,"savings.checking_be_eligibility_flag_v2":true,"savings.billpay_eligible":true,"mortgage.mweb_navi_new_dashboard_link":"new","coreProduct.dweb_stickyTopEnabled":false,"portals.reliefCenter_isEnabled":true,"portals.tax_nav_redirect_enabled":false,"portals.tax_surface_eligibility_unauth":true,"mono.tax_navbar_badge_text":"control","mono.tax_unauth_navbar_badge_text":"","navigation":{"web":{"isMobile":false}}},"version":"10.32.0","moduleName":"navi","bundleName":"navi-inline-retrovision.bundle.js","nonce":{"script":"d5951f1b7cde348759b0310ef405830a"}},"darwin":{"mono":{"homepage_version":"b","homepage_enable_criticalCss":true,"homepage_section_1":"kc_cc_pl_v1","homepage_section_2":"v1","homepage_section_3":"money","homepage_section_4":"v1","homepage_section_5":"v1","homepage_section_6":"v1","homepage_section_7":"v1","homepage_section_8":"v1","homepage_section_9":"v1"}},"navigation-web":{"darwin":{"coreProduct.scooter_mweb_notificationCenterEnabled":true,"coreProduct.scooter_dweb_navPlacement":"top","coreProduct.scooter_dweb_navCopy":"scooter","mono.tax_navbar_badge_text":"control","coreProduct.scooter_mweb_newNavIconsEnabled":false,"coreProduct.scooter_dweb_myRecsEnabled":false,"coreProduct.scooter_dweb_myRecsBadgeEnabled":false,"coreProduct.scooter_dweb_autoHomeEnabled":false},"platformInfo":{"platform":"Web","osType":null},"nonce":"d5951f1b7cde348759b0310ef405830a"},"ckRawTracker":{"enabled":true,"url":"https:\x2F\x2Fcreditkarmacdn-a.akamaihd.net\x2Fres\x2Fcontent\x2Fbundles\x2Fcfwk_raw-tracker-web\x2F2.8.1\x2Findex.js","hash":"sha384-LIWRu\x2Fm\x2FCPYkQvDB\x2B6CsmuSqzmdqkZg5VJavhsyvLG1Ly2iXMcOcy8TnMRV65K0O"},"footer":{"darwin":{"mono.geolocation":"hide"},"version":"4.9.8","moduleName":"footer","bundleName":"footer-retrovision.bundle.js","nonce":"d5951f1b7cde348759b0310ef405830a","location":{"country":"US","continent":"NA","subdivision":"OH","zipCode":"43215"},"domain":"US"},"zipkin":{"enabled":false},"request":{"tokens":{"accessToken":false,"refreshToken":false},"cookieId":"6AA3886FD63D41C9B5E1933E22065C85","params":{},"path":"\x2F","fullPath":"https:\x2F\x2Fwww.creditkarma.gq\x2F","traceId":"3234806a-8570-4eec-bace-c58e2b462102"},"isScooter":false,"geoipData":{"country":"US","continent":"NA","subdivision":"OH","zipCode":"43215"},"nonce":"d5951f1b7cde348759b0310ef405830a","platformInfo":{"platform":"Web","osType":null}}
    }
  };
</script> 
<script src="something/else2.js"></script>
bar';

echo preg_replace('#<script data-cfasync="false" src="/cdn-cgi/scripts/(.*?)/cloudflare-static/email-decode.min.js"></script><([^<]*)</script>#', 'hello', $str);

语法代码:

echo preg_replace('#<script data-cfasync="false" src="/cdn-cgi/scripts/(.*?)/cloudflare-static/email-decode.min.js"></script><([^<]*)</script>#', 'hello', $str);

解释:

#/ - 开始和结束

(.*) - 随机值

([^&lt;]*)([^anything]*) - 搜索

(.*?) - 未知

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多