【问题标题】:Replace specific string in HTML file with PHP用 PHP 替换 HTML 文件中的特定字符串
【发布时间】:2018-02-21 08:29:22
【问题描述】:

我的网站遇到了这个小问题。我想替换我的一个 html 文件中的一个字符串。我做了一个 php 文件,找到特定的字符串并替换它,但它变得无用成为更改后的字符串不一样......

在我的 HTML 文件中,我可以为 PHP 文件生成的任何随机字符串更改 7NT0j5dB2QMyWv96nXIDgaR4PJ

<tr>
<td>Secret Key</td>
<td><strong style="color:#b94a48;">7NT0j5dB2QMyWv96nXIDgaR4PJ</strong></td>
</tr>

但在我的 PHP 文件中,要替换的字符串仍然是 7NT0j5dB2QMyWv96nXIDgaR4PJ,而不是新的...

这是我的php代码:

$contents = file_get_contents ("step-second-test.php");

$contents = str_replace(array("7NT0j5dB2QMyWv96nXIDgaR4PJ"), generateRandomString($length = 26), $contents);
file_put_contents("step-second-test.php", $contents);

【问题讨论】:

  • 为什么不直接在 step-second-test.php 中回显函数的结果?
  • 为我工作3v4l.org/R1K1d 也许问题出在generateRandomString,你没有包括
  • ^ 这意味着您要替换的内容存在于文件中。 或者这个html部分是动态创建的
  • @u_mulder OP的观点是file_put_contents("step-second-test.php", $contents);修改了文件,也就是说第一次运行后基本没用了。
  • generateRandomString($length = 26) 可能应该是 generateRandomString(26)。你也可以发布那个功能吗?

标签: php html string replace find


【解决方案1】:

对我来说,只需将函数调用从不直接放在 step-second-test.php 中的任何地方移动即可

<tr>
<td>Secret Key</td>
<td><strong style="color:#b94a48;"><?php echo generateRandomString(26);
 ?></strong></td>
</tr>

只需确保您在此文件中也有函数定义,或者在具有函数定义的文件中添加include()

【讨论】:

  • @jamesbub 如果您喜欢答案,请不要忘记投票和/或接受。 +1 来自我
【解决方案2】:

据我了解,您使用step-second-test.php 作为随时间变化的静态文件。要处理您的问题,您可以将step-second-test.php 转换为这样的动态文件:

<tr>
<td>Secret Key</td>
<td><strong style="color:#b94a48;"><?php echo generateRandomString(26); ?></strong></td>
</tr>

从现在开始,您可以在 php 脚本中使用 include 'step-second-test.php';,而不是使用 file_get_contents。但请记住,generateRandomString 需要可访问。

如果你想坚持你所拥有的,你需要改变你的想法。问题不是用其他任何东西替换“7NT0j5dB2QMyWv96nXIDgaR4PJ”,而是用其他任何东西替换&lt;strong&gt;标签之间的任何东西。

对于这样的问题,有很多选项我发现使用regex 是最简单的。 PHP 通过提供preg_replace 使问题变得更容易。因此,您的问题的解决方案是:

$contents = file_get_contents ("step-second-test.php");

$pattern = '/(.*<strong.*>).*(<\/strong>.*)/i';
$replacement = '${1}' . generateRandomString($length = 26) . '${2}';
$contents = preg_replace($pattern, $replacement, $contents);

file_put_contents("step-second-test.php", $contents);

如果你不知道正则表达式,我推荐regexr.com 来学习和玩它们。正则表达式是个好东西。对任何程序员都是必需的。很高兴知道任何计算机用户。

【讨论】:

  • 谢谢阿列克!答案也很好! :)
  • 仅供参考,这将替换 &lt;strong&gt;&lt;/strong&gt; 标签中的 all 文本实例。对于上面给出的有限示例,这可能很好,但在更大的范围内,使用正则表达式解析 HTML 很少是要走的路。
  • 我使用@PatrickQ 的解决方案,它工作得非常好!再次感谢大家!
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2022-06-16
相关资源
最近更新 更多