Php 如何替换字符串?

Php 如何替换字符串?,php,javascript-events,Php,Javascript Events,我有一个包含两个 '; 如何使用PHPpreg\u replace或其他方法,将单独的onclick属性添加到该字符串中的标记,即第一个标记onclick=“test1()”,下一个标记onclick=“test2()”等 $str = str_replace(' href="',' onclick="test(this)" href="',$str); 这比preg_replace要快得多,因为它不需要匹配模式。 当然,这取决于你使用它的方式 这比preg_replace要快得多,因为它不

我有一个包含两个

';
如何使用PHP
preg\u replace
或其他方法,将单独的
onclick
属性添加到该字符串中的
标记,即第一个
标记
onclick=“test1()”
,下一个
标记
onclick=“test2()”

$str = str_replace(' href="',' onclick="test(this)" href="',$str);
这比preg_replace要快得多,因为它不需要匹配模式。 当然,这取决于你使用它的方式

这比preg_replace要快得多,因为它不需要匹配模式。 当然,这取决于您使用它的方式。

注意:此解决方案仅适用于您当前的字符串模式(似乎是一组链接)

注2:您也可以使用

最后回答你的问题

$str =  str_ireplace ('<a ', '<a onclick="doSomething(this)"', $str);
$str=str\u ireplace('

编辑

@Eldros指出,每个环节的方法都需要不同

在这一点上,我绝对建议您在客户端处理它,但是如果您必须使用PHP,您可以使用类似于DOM解析的库。 请注意,这并不使用DOM操作,而是使用字符串解析。这可能对您有影响,也可能对您没有影响

这是文档中显示如何修改字符串的示例。有关完整用法,请参阅文档:

//从字符串创建DOM
$html=str_get_html('HelloWorld');
$html->find('div',1)->class='bar';
$html->find('div[id=hello]',0)->innertext='foo';
echo$html;//输出:fooWorld
在您的情况下,您只需加载带有
str\u get\u html
的字符串,并在其中逐一修改链接即可。

注意:此解决方案仅适用于您当前的字符串模式(似乎是链接的集合)

注2:您也可以使用

最后回答你的问题

$str =  str_ireplace ('<a ', '<a onclick="doSomething(this)"', $str);
$str=str\u ireplace('

编辑

@Eldros指出,每个环节的方法都需要不同

在这一点上,我绝对建议您在客户端处理它,但是如果您必须使用PHP,您可以使用类似于DOM解析的库。 请注意,这并不使用DOM操作,而是使用字符串解析。这可能对您有影响,也可能对您没有影响

这是文档中显示如何修改字符串的示例。有关完整用法,请参阅文档:

//从字符串创建DOM
$html=str_get_html('HelloWorld');
$html->find('div',1)->class='bar';
$html->find('div[id=hello]',0)->innertext='foo';
echo$html;//输出:fooWorld

在您的情况下,您只需使用
str\u get\u html
加载字符串,然后逐个循环修改链接。

我没有使用此库,但在的帮助下,您可以使用此代码尝试添加函数:

//array containing your functions names
$functions = array(test1, test2);

//Parse the string to get the HTML DOM
$html = str_get_html($str);

//Retrieve the array of anchors
$links = $html->find('a');

//Loop through the anchors and add the onclick events
for($i=0;$i<count($links);$i++){
    $links[$i]->onclick = $functions[$i];
}

//return the html to the string
$html->save();
检索函数很重要,因为
links[i].id
是一个字符串,AddEventListener不会使用字符串而不是函数。由于
window.function
window['function']
相同,因此转换非常完美


与PHP代码一样,这可能是根据您的环境而改变的对象。例如,如果所有需要
onchange
eventHandler的锚都位于id为“MyLink”的
div
标记下,您可以通过
document.getElementsByTagName(“a”);
通过
document.getElementById(“MyLink”)来改变
.getElementsByTagName(“a”);
我没有使用此库,但在的帮助下,您可以使用此代码尝试添加函数:

//array containing your functions names
$functions = array(test1, test2);

//Parse the string to get the HTML DOM
$html = str_get_html($str);

//Retrieve the array of anchors
$links = $html->find('a');

//Loop through the anchors and add the onclick events
for($i=0;$i<count($links);$i++){
    $links[$i]->onclick = $functions[$i];
}

//return the html to the string
$html->save();
检索函数很重要,因为
links[i].id
是一个字符串,AddEventListener不会使用字符串而不是函数。由于
window.function
window['function']
相同,因此转换非常完美


与PHP代码一样,这可能是根据您的环境而改变的对象。例如,如果所有需要
onchange
eventHandler的锚都位于id为“MyLink”的
div
标记下,您可以通过
document.getElementsByTagName(“a”);
通过
document.getElementById(“MyLink”)来改变
.getElementsByTagName(“a”);
php
是一个比
meta
好得多的标记,你不认为吗?;)它必须纯php,还是允许javascript解决方案?
php
是一个比
meta
好得多的标记,你不认为吗?;)它必须纯php,还是允许javascript解决方案?很好,但这并不是皇家想要的。每个
都有相同的onclick处理程序,而不是
test1()、test2()、…
很好的处理程序,但不是@Royal真正想要的。对于每个<代码> <代码>,您有相同的OnCutter处理程序,而不是<代码> TEST1()、Test2()、… @ JONNP考虑匹配<代码> @ JohnP,它不是为OnCutt事件赋予所有锚函数相同的功能吗?用另一个选项编辑了我的答案。谢谢提醒:)@Eldros aaa刚刚注意到你指向了完全相同的库!希望你不介意!我已经用过了,可以确认他可以用它做他需要的事情this@JohnP没问题。最后,我们得出了相同的解决方案不过我有一个问题:在php网站上,我研究了您使用的函数
str_ireplace
,以及@Christian使用的函数
str_replace
,我不明白为什么在这种情况下我应该使用一个而不是另一个。有没有我没有意识到的优势?@ JNNP考虑匹配<代码> @ JohnP,它不会给所有锚定相同的函数吗?
//Add an event listener that will trigger when the content of the page is loaded
document.addEventListener("DOMContentLoaded", function() {
    var i;

    //retrieve all the anchors
    var link = document.getElementsByTagName("a");
    //Loop through the anchors
    for(i=0; i<links.length; i++){
        //If the anchor has an id
        if(links[i].id){
            //retrieve the function
            var myFuncName = links[i].id;
            var myFunction = window[myFuncName];
            //add the event listener
            links[i].addEventListener("change", myFunction, false);
        }
    }
}, false);