如何替换 使用 php 函数转换为 html 代码

发布于 2024-12-07 05:37:51 字数 569 浏览 0 评论 0 原文

我想用 html 代码替换图像,这必须是 php 函数的输出。 每当在 html 文档中找到图像标签时,都应将其传递给 php 函数并替换为 html 字符串。 我的期望如下。

index.htm 文件包含 hello 句子延续。

这个 image.jpg 被传递给 php 函数,例如 convert_pic('image.jpg');

所以index.htm的输出是 hello

.... 句子延续。

其中

....
是 php 函数 convert_pic('image.jpg'); 的输出,

因此 < img src="image.jpg" /> 将替换为 如何做到这一点,或者有其他可能性来实现这一目标?

I want to replace a image with html code, that must be the output of a php function.
whenever a image tag is found in an html document, it should be passed to a php function and replaced with a html strings.
my expectation is like below.

index.htm file contains
hello <img src="image.jpg" /> sentence continuation.

this image.jpg is passed to php function like
convert_pic('image.jpg');

so the output of index.htm is
hello <div>....</div> sentence continuation.

where <div>....</div> is the out put of php function convert_pic('image.jpg');

so <img src="image.jpg" /> is to be replace by <?php convert_pic('image.jpg');
how it can be done, or any other possibility to attain this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忱杏 2024-12-14 05:37:51

通过 DOM 扩展,您可以使用 XPath 查找所有 img 标签,然后替换它们
另请参阅:

例如

<?php
// closure/lambda, php 5.3+ only
$convert = function($src) {
    return '---'.$src.'---';
};

$doc = new DOMDocument;
$doc->loadhtml(getHTML());
echo "before: ", $doc->savehtml(), "\n\n";
foo($doc, $convert);
echo "after: ", $doc->savehtml(), "\n\n";


function foo(DOMDocument $doc, $fn) {
    $xpath = new DOMXPath($doc);

    $imgs = array();
    foreach( $xpath->query('/html/body//img') as $n ) {
        $imgs[] = $n;
    }

    foreach($imgs as $n) {
        $txt = $fn($n->getAttribute('src'));
        $div = $doc->createElement('div', $txt);
        $n->parentNode->replaceChild($div, $n);
    }
}

function getHTML() {
return '<html><head><title>...</title></head><body>
    <p>lorem ipsum <img src="a.jpg" alt="img#1"/></p>
    <p>dolor sit amet<img src="b.jpg" alt="img#2"/></p>
    <div><div><div><img src="c.jpg" alt="img#3" /></div></div></div>
</body></html>';
}

打印

before: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><title>...</title></head><body>
    <p>lorem ipsum <img src="a.jpg" alt="img#1"></p>
    <p>dolor sit amet<img src="b.jpg" alt="img#2"></p>
    <div><div><div><img src="c.jpg" alt="img#3"></div></div></div>
</body></html>


after: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><title>...</title></head><body>
    <p>lorem ipsum <div>---a.jpg---</div></p>
    <p>dolor sit amet<div>---b.jpg---</div></p>
    <div><div><div><div>---c.jpg---</div></div></div></div>
</body></html>

With the DOM extension you can use XPath to find all img tags and then replace them
see also:

e.g

<?php
// closure/lambda, php 5.3+ only
$convert = function($src) {
    return '---'.$src.'---';
};

$doc = new DOMDocument;
$doc->loadhtml(getHTML());
echo "before: ", $doc->savehtml(), "\n\n";
foo($doc, $convert);
echo "after: ", $doc->savehtml(), "\n\n";


function foo(DOMDocument $doc, $fn) {
    $xpath = new DOMXPath($doc);

    $imgs = array();
    foreach( $xpath->query('/html/body//img') as $n ) {
        $imgs[] = $n;
    }

    foreach($imgs as $n) {
        $txt = $fn($n->getAttribute('src'));
        $div = $doc->createElement('div', $txt);
        $n->parentNode->replaceChild($div, $n);
    }
}

function getHTML() {
return '<html><head><title>...</title></head><body>
    <p>lorem ipsum <img src="a.jpg" alt="img#1"/></p>
    <p>dolor sit amet<img src="b.jpg" alt="img#2"/></p>
    <div><div><div><img src="c.jpg" alt="img#3" /></div></div></div>
</body></html>';
}

prints

before: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><title>...</title></head><body>
    <p>lorem ipsum <img src="a.jpg" alt="img#1"></p>
    <p>dolor sit amet<img src="b.jpg" alt="img#2"></p>
    <div><div><div><img src="c.jpg" alt="img#3"></div></div></div>
</body></html>


after: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><title>...</title></head><body>
    <p>lorem ipsum <div>---a.jpg---</div></p>
    <p>dolor sit amet<div>---b.jpg---</div></p>
    <div><div><div><div>---c.jpg---</div></div></div></div>
</body></html>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文