【问题标题】:PHP str_replace is replacing but clearing the rest of the textPHP str_replace 正在替换但清除其余文本
【发布时间】:2016-06-02 16:26:56
【问题描述】:

我正在使用 str_replace 替换字符串的子字符串,然而,替换发生了,但文本的其余部分正在消失。

$log_text 的示例是 %%clinicid=1%% 诊所,我们有五个房间。

function strafter($string, $substring) {
  $pos = strpos($string, $substring);
  if ($pos === false)
   return $string;
  else  
   return(substr($string, $pos+strlen($substring)));
}

$log_text = '%%clinicid=1%% clinic has <b>5</b> rooms.';

if (strpos($log_text, '%%clinicid=') !== false) {
    $clinicid = strafter($log_text,'%%clinicid='); 
    $clean_clinicid = str_replace('%%','',$clinicid);
    $clinicname = $db->single("SELECT clinic_name FROM dg_clinics WHERE id = :id", array("id"=>"$clean_clinicid"));

    $clinic_id_string = '%%clinicid='.$clinicid;

    $log_text = str_replace($clinic_id_string,$clinicname,$log_text);

}

上面的代码给出了

只是不是全文,而不是

Aaa 诊所有 5 个房间。

我哪里做错了?

PS。如果我使用%%clinicid=1%%,它可以完美运行,但使用字符串则无法正常工作。

【问题讨论】:

  • $log_text$clinicid 的示例是什么?
  • 尝试包含一个完整的、有效的问题示例。我应该能够执行它并查看您的输出。
  • @adams 尝试在那里得到你的结果 - eval.in/582124
  • 我试过你的代码,但没有用,我已经更新并放了我的完整代码。 @splash58
  • 您的代码按照发布的方式工作。您如何尝试使用 $clean_clinicid 字符串?例如,我可以想象,如果您尝试在不带引号的 ah HTML 属性字符串中使用它,结果将只是出现空格之前的第一个单词。我的意思是"&lt;input value=$clean_clinicid&gt;",而不是带引号的value='$clean_clinicid'

标签: php str-replace


【解决方案1】:

使用 preg_match 获取 str_replace 的诊所 id 和模式

$log_text = '%%clinicid=1%% clinic has <b>5</b> rooms.';

if (preg_match('/%%clinicid=(\d)%%/', $log_text, $m) !== false) {
   $clean_clinicid = $m[1] ."\n";
   $clinicname = $db->single("SELECT clinic_name FROM dg_clinics WHERE id = :id", array("id"=>"$clean_clinicid"));
   $log_text = str_replace($m[0],$clinicname,$log_text);
}
echo $log_text;

【讨论】:

    【解决方案2】:

    你应该回应你为你的http://php.net/manual/en/function.str-replace.php得到的东西

    echo "$clinic_id_string<br>";
    echo "$clinicname<br>";
    echo "$log_text<br>";
    

    这应该会给你一个提示,为什么它不起作用。

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 2016-10-21
      • 2016-01-11
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      相关资源
      最近更新 更多