【问题标题】:PHP str_replace replacing text in string that doesnt matchPHP str_replace 替换字符串中不匹配的文本
【发布时间】:2020-01-16 21:32:52
【问题描述】:

我试图在来自用户的“动态字符串”上运行 str_replace。

但是每次我的函数运行时,它似乎输出错误的东西,我不知道如何修复它。

例如,如果$payload['Name'] = 'this name'

那么当函数返回时字符串变成了

this name Placethis name

似乎正在发生的是它还替换了数组中PlaceName 内的Name

我的代码如下;

function formatThis($payload)
{
    $description = '';
    if ( array_key_exists('Description', $payload) ) {
        $description = $payload['Description'];
    }

    $placeName = '';
    if ( array_key_exists('PlaceName', $payload) ) {
        $placeName = $payload['PlaceName'];
    }

    $dynamicString = "Name PlaceName"
    $template = str_replace(
        array("Name", "Description", "PlaceName"),
        array($payload['Name'], $description, $placeName),
        $dynamicString
    );

    return $template;
}

【问题讨论】:

  • 似乎字符串实际上正确替换为函数的描述。它只是不是你喜欢的行为。

标签: php arrays regex string replace


【解决方案1】:

而不是使用str_replace,你应该使用`preg_replace',检查Demo

preg_replace(['/\bName\b/','/\bDescription\b/','/\bPlaceName\b/'], [$payload['Name'], $description, $placeName], $dynamicString);

【讨论】:

  • 虽然这可能有效,但手头的问题是一个很好的例子,占位符通常具有特殊的语法,例如 {here}{%here%}
猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多