我有一个PayPal按钮代码,我想使用自己的图像。这是PayPal按钮代码:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="Q8LQ82SNNSBKC">
<input type="image" src="https://www.paypal.com/images/pp-buy-now-btn-bryellow.png" border="0" name="submit" alt="PayPal – The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">
</form>
...其中包含多个&#39;输入&#39;标签,我想替换&#39; src&#39;输入(图像类型)。我已尽最大努力完成这项工作:
$paypal_button_code2 = preg_replace('/<input[type="image"]\ [^>]+src="([^"]+)"/', $newimageurl, $paypal_button_code);
但这不起作用。
有人可以指出我正确的方向(使用正确的代码,或通过正则表达式的帮助页面轻松的方式!!)
非常感谢!
答案 0 :(得分:2)
使用html的方法是DOMDocument,而不是正则表达式:
$html = '<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"> <input type="hidden" name="cmd" value="_s-xclick"> <input type="hidden" name="hosted_button_id" value="Q8LQ82SNNSBKC"> <input type="image" src="https://www.paypal.com/images/pp-buy-now-btn-bryellow.png" border="0" name="submit" alt="PayPal – The safer, easier way to pay online!"> <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1"> </form>';
$dom = new DOMDocument;
$dom->loadHTML('<div id="root">' . $html . '</div>');
$root = $dom->getElementById('root');
$xp = new DOMXPath($dom);
$nodeList = $xp->query('//form[@action="https://www.paypal.com/cgi-bin/webscr"][1]/input[@type="image"]/@src');
if ( $nodeList ) {
$newimageurl = 'path/to/newimage.gif';
$nodeList->item(0)->nodeValue = $newimageurl;
$html = '';
foreach ($root->childNodes as $childNode) {
$html .= $dom->saveHTML($childNode);
}
}
echo $html;
XPath查询详情:
// # anywhere in the DOM tree
form # a form element
[ # open a predicate (condition on the current element)
# must have an attribute "action" with the value of this string
@action="https://www.paypal.com/cgi-bin/webscr"
]
[1] # other predicate: first occurrence of this kind of form
/ # direct child
input
[
@type="image"
]
/
@src # src attribute
关于'<div id="root">' . $html . '</div>'
:
DOMDocument::loadHTML
加载一个html字符串并构建DOM树。要做到这一点,你需要一个根元素,但由于你处理的是html部分而不是整个html文档,你的字符串可能没有包含在一个独特的元素之间(即整个html文档中的<html>...</html>
)。为了避免DOMDocument的自动更正,诀窍在于提供一个假的根元素。编辑DOM树后,您所要做的就是连接根元素的所有子节点。
答案 1 :(得分:1)
你不需要<input[type="image"]
$paypal_button_code2 = preg_replace('/src="([^"]+)/', 'src="'.$newimageurl, $paypal_button_code, 1);
答案 2 :(得分:0)
为什么不这样做:
<input type="image" src="<?php echo $newimageurl;?>" ...>
答案 3 :(得分:0)
我建议您不要像使用HTML一样处理HTML。这真的是错误的方式。
我建议您使用模板框架,一个简单的模板框架,例如smarty - https://www.smarty.net/ - 或者至少是您格式化字符串,例如:
$my_url = "http://whatyouwant";
$whatever_html = <<<EOT
<input type="image" src={%MYCOOKIE%} border="0" name="submit" alt="PayPal – The safer, easier way to pay online!"> <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1"> </form>
EOT;
$whatever_html = str_replace($whatever_html, $my_url, "{%MYCOOKIE%}");
三重'&lt;&lt;&lt;&lt;'的特殊语法(HEREDOC)允许您放置任何类型的HTML代码,而无需进一步警惕引号。
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc