在字符串中搜索 URLS 并将查询字符串添加到每个问题
Searching for URLS in string and add query string to each one problem
我编写了这个脚本来执行此操作,但有一个问题我无法弄清楚:
$buffer = '<a href="http://wwww.domain.com">Domain1</a>';
$buffer .= '<a href="http://wwww.domain.com?id=2">Domain2</a>';
preg_match_all('/<a href="(.*?)"/s', $buffer, $matches);
$searches = array();
$replaces = array();
foreach($matches[1] as $link){
$contain = parse_url($link, PHP_URL_QUERY);
$symbol = $contain ? "&" : "?";
$new_link = $link . $symbol . "mode=testing";
$searches[] = $link;
$replaces[] = $new_link;
}
$newbuffer = str_replace($searches ,$replaces , $buffer);
var_dump($newbuffer);
输出:
<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?mode=testing?id=2">Domain2</a>
预期输出将参数添加到每个 link:
<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?id=2&mode=testing">Domain2</a>
有什么帮助吗?
问题来自:
$searches
包含:
array(2) {
[0]=>
string(24) ""http://wwww.domain.com""
[1]=>
string(29) ""http://wwww.domain.com?id=2""
}
$replaces
包含:
array(2) {
[0]=>
string(37) ""http://wwww.domain.com?mode=testing""
[1]=>
string(42) ""http://wwww.domain.com?id=2&mode=testing""
}
然后str_replace
将$searches
中的所有个元素替换为$replaces
中的所有个元素,因此,http://wwww.domain.com
与 http://wwww.domain.com?mode=testing
AND http://wwww.domain.com?id=2
与 http://wwww.domain.com?mode=testing?id=2
(它在 domain.com
之后附加 ?mode=testing
)
这是一个解决方案:
在两个数组中的链接周围添加 "
。
$buffer = '<a href="http://wwww.domain.com">Domain1</a>';
$buffer .= '<a href="http://wwww.domain.com?id=2">Domain2</a>';
preg_match_all('/<a href="(.*?)"/s', $buffer, $matches);
$searches = array();
$replaces = array();
foreach($matches[1] as $link){
$contain = parse_url($link, PHP_URL_QUERY);
$symbol = $contain ? "&" : "?";
$new_link = $link . $symbol . "mode=testing";
$searches[] = '"' . $link . '"';
$replaces[] = '"' . $new_link . '"';
}
$newbuffer = str_replace($searches ,$replaces , $buffer);
var_dump($newbuffer);
输出:
<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?id=2&mode=testing">Domain2</a>
我编写了这个脚本来执行此操作,但有一个问题我无法弄清楚:
$buffer = '<a href="http://wwww.domain.com">Domain1</a>';
$buffer .= '<a href="http://wwww.domain.com?id=2">Domain2</a>';
preg_match_all('/<a href="(.*?)"/s', $buffer, $matches);
$searches = array();
$replaces = array();
foreach($matches[1] as $link){
$contain = parse_url($link, PHP_URL_QUERY);
$symbol = $contain ? "&" : "?";
$new_link = $link . $symbol . "mode=testing";
$searches[] = $link;
$replaces[] = $new_link;
}
$newbuffer = str_replace($searches ,$replaces , $buffer);
var_dump($newbuffer);
输出:
<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?mode=testing?id=2">Domain2</a>
预期输出将参数添加到每个 link:
<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?id=2&mode=testing">Domain2</a>
有什么帮助吗?
问题来自:
$searches
包含:
array(2) {
[0]=>
string(24) ""http://wwww.domain.com""
[1]=>
string(29) ""http://wwww.domain.com?id=2""
}
$replaces
包含:
array(2) {
[0]=>
string(37) ""http://wwww.domain.com?mode=testing""
[1]=>
string(42) ""http://wwww.domain.com?id=2&mode=testing""
}
然后str_replace
将$searches
中的所有个元素替换为$replaces
中的所有个元素,因此,http://wwww.domain.com
与 http://wwww.domain.com?mode=testing
AND http://wwww.domain.com?id=2
与 http://wwww.domain.com?mode=testing?id=2
(它在 domain.com
之后附加 ?mode=testing
)
这是一个解决方案:
在两个数组中的链接周围添加 "
。
$buffer = '<a href="http://wwww.domain.com">Domain1</a>';
$buffer .= '<a href="http://wwww.domain.com?id=2">Domain2</a>';
preg_match_all('/<a href="(.*?)"/s', $buffer, $matches);
$searches = array();
$replaces = array();
foreach($matches[1] as $link){
$contain = parse_url($link, PHP_URL_QUERY);
$symbol = $contain ? "&" : "?";
$new_link = $link . $symbol . "mode=testing";
$searches[] = '"' . $link . '"';
$replaces[] = '"' . $new_link . '"';
}
$newbuffer = str_replace($searches ,$replaces , $buffer);
var_dump($newbuffer);
输出:
<a href="http://wwww.domain.com?mode=testing">Domain1</a>
<a href="http://wwww.domain.com?id=2&mode=testing">Domain2</a>