如何替换字符串中的所有空格但仅在ID属性中?

时间:2017-01-15 09:09:31

标签: php

我有一个下一个字符串:

$str = '<h2 id="name of header">Name of header</h2>';

需要替换ID属性中的所有空格。例如:

$str = '<h2 id="name-of-header">Name of header</h2>';

我有什么方法可以做到吗?

3 个答案:

答案 0 :(得分:0)

由于id是引号之间的唯一部分 - 在引号处将其展开 - 使用str_replace替换中间部分(id部分)中的空格,然后将它们连接回一个字符串。

这意味着...... explode('“',$ str);会给你结果:

$str_portions[0] = <h2 id=
$str_portions[1] = name of header
$str_portions[2] = >Name of header</h2>;

使用str_replace('',' - ',$ str_portions [1])str_replace $ str_portions [1]中带连字符的空格;会给:

$str_portions[1] = name-of-header

所以以下是:

$str = '<h2 id="name of header">Name of header</h2>';

$str_portions = explode('"',$str); // splits the original statement into 3 parts
$str_id = str_replace(' ', '-', $str_portions[1]);  // replaces the spaces with hyphens in the 2nd (id) portion
$str = $str_portions[0] . '"' . $str_id . '"' . $str_portions[2]; // joins all 3 parts into a single string again - reinserting the quotes
echo $str; // gives  '<h2 id="name-of-header">Name of header</h2>';

答案 1 :(得分:0)

<?php
$str = '<h2 id="name of header">Name of header</h2>';

$new_str = preg_replace_callback('#\"([^"]*)\"#', function($m){
    return('"'. str_replace(' ', '-', $m[1]) .'"');
}, $str);
echo $new_str;
 ?>

它会完美运作 感谢

答案 2 :(得分:0)

您可以使用preg_replace仅替换字符串中要替换的部分。

您也可以使用import R from '@types/ramda'但是,您必须只选择要替换的部分。

使用preg_replace,您可以执行以下操作:

str_replace

<?php $str = '<h2 id="name of header">Name of header</h2>';; $new_str = preg_replace( 'id="([\w\s]+)"', 'id="' . str_replace(' ', '-', $1) . '"', $str); ?> 只选择ID部分,而id="([\w\s]+)"会用&#39; - &#39;替换其中的空格。

但如果您不熟悉正则表达式,我建议您使用更简单的gavgrif解决方案。