使用PHP替换HTML字符串中的属性值

时间:2017-03-10 19:06:47

标签: php wordpress

我有一个传递HTML字符串的过滤器钩子。示例字符串可能是:

'<input type="text" value="4893" />'

将字符串传递给过滤器钩子:

add_filter( 'html_filter', 'my_html_filter', 10, 1 );
function my_html_filter( $html ) {

    $html =     <--- REPLACE VALUE ATTRIBUTE HERE

    return $html;
}

我在my_html_filter()内需要做的是替换value=""的值,我不知道如何在$html中隔离它。作为一个随机的例子,说$html传递为:

'<input type="text" value="345" />'

我需要将其更改为:

'<input type="text" value="14972" />'

我该怎么做? str_replace和正则表达式的组合?

2 个答案:

答案 0 :(得分:1)

使用HTML解析器解析HTML!

$html = '<input type="text" value="4893" />';
$dom = new DomDocument;
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('input');
$node = $nodes[0];
$node->setAttribute('value', 'foo');
echo $dom->saveHTML($node);

结果:

<input type="text" value="foo">

答案 1 :(得分:0)

add_filter( 'html_filter', 'my_html_filter', 10, 1 );
function my_html_filter( $html ) {

    // assuming you have a way to know the new value you want
    // i used an example value, probably you have to construct 
    // the following string
    $new_value = 'value="65432"';

    $html = preg_replace('/value="[0-9]+"/', $new_value, $html);

    return $html;
}