查找并附加某个类的 href

2024-03-07

我一直在寻找解决方案,但尚未找到正确的方法。

情况是这样的: 我需要找到给定类的页面上的所有链接(例如class="tracker"),然后在末尾附加查询字符串值,因此当用户加载页面时,这些某些链接会使用一些动态信息进行更新。

我知道如何做到这一点JavaScript,但我真的很想调整它以运行服务器端。我很新PHP,不过从表面上看,XPath可能是我正在寻找的,但我还没有找到合适的例子来开始。有没有类似的东西GetElementByClass?

任何帮助将不胜感激!

影子


有没有类似的东西GetElementByClass?

这是我发起的一个实现......

function getElementsByClassName(DOMDocument $domNode, $className) {
    $elements = $domNode->getElementsByTagName('*');
    $matches = array();
    foreach($elements as $element) {
        if ( ! $element->hasAttribute('class')) {
            continue;
        }
        $classes = preg_split('/\s+/', $element->getAttribute('class'));
        if ( ! in_array($className, $classes)) {
            continue;
        }
        $matches[] = $element;
    }
    return $matches;
}

该版本不依赖上面的辅助函数。

$str = '<body>
    <a href="">a</a>
        <a href="http://example.com" class="tracker">a</a>
        <a href="http://example.com?hello" class="tracker">a</a>
    <a href="">a</a>
</body>
    ';

$dom = new DOMDocument;

$dom->loadHTML($str);

$anchors = $dom->getElementsByTagName('body')->item(0)->getElementsByTagName('a');

foreach($anchors as $anchor) {

    if ( ! $anchor->hasAttribute('class')) {
        continue;
    }

    $classes = preg_split('/\s+/', $anchor->getAttribute('class'));

    if ( ! in_array('tracker', $classes)) {
        continue;
    }

    $href = $anchor->getAttribute('href');

    $url = parse_url($href);

    $attach = 'stackoverflow=true';

    if (isset($url['query'])) {
        $href .= '&' . $attach;
    } else {
        $href .= '?' . $attach;
    }

    $anchor->setAttribute('href', $href);
}

echo $dom->saveHTML();

Output

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
    <a href="">a</a>
        <a href="http://example.com?stackoverflow=true" class="tracker">a</a>
        <a href="http://example.com?hello&amp;stackoverflow=true" class="tracker">a</a>
    <a href="">a</a>
</body></html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找并附加某个类的 href 的相关文章

  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行
  • ZipArchive 提取 - 单个文件

    我有以下代码 ipaFile path file ipa iconFilePath Payload myapp app email protected cdn cgi l email protection the pathway to my
  • PHP 换行符 (\n) 不起作用

    由于某种原因我无法使用 n使用 PHP 输出到文件时创建换行符 上面只写着 n 到文件 我尝试使用 n 同样 它只写 n 如预期 但我一生都无法弄清楚为什么在字符串中添加 n 不会创建新行 我也尝试过 r n但它只是附加 r n 到文件中的
  • 将扩展配置文件实体添加到 FOS UserBundle

    我正在尝试扩展 FOS UserBundle 以允许扩展配置文件实体除了基本 UserBundle 字段之外还保存其他信息 因为我的网站上有多种类型的用户 所以我创建了单独的实体来保存个人资料信息 我的实体设置如下 class UserPr
  • 使用php在html页面中显示bbcode

    我已经有一个 bbcode 字符串 mybbcode b Hello word b 使用 php 我想在 html 页面中以 html 格式显示它 例如 div gt b hello word b div 基本上其他人已经对你说过了 但是如
  • Zend 如何使用 mod_rewrite 解析前端控制器中的 URL?

    我不明白 Zend Framework 如何控制路由 我实际上正在尝试创建自己的控制器 路由类 编写了与 Zend 建议的 htaccess 相同的代码 以重写位于网站根目录的index php RewriteEngine On Rewri
  • 在 Drupal 中选择性地删除页面的样式表

    我正在尝试为首页制作不同的布局 在此过程中 我声明了名为 front page css 和 page front tpl php 的新样式表 我正在使用加载responsive sidebar css 的 Zen 子主题 我想删除 resp
  • 从目录中读取所有文件内容 - php

    这实际上是一个简单的任务 我想显示指定文件夹中所有文件的内容 我正在传递目录名称 echo a href row qname a 在第二页上 我正在迭代目录内容 while entryname readdir myDirectory if
  • 打印一个模式以显示最多 5 行 5 列的数字,例如 5 4 3 2 1 和下一行 4 3 2 1 5 直到第 5 行

    这是一个正方形图案 每行有 5 列 共有 5 行 图案如下所示 5 4 3 2 1 4 3 2 1 5 3 2 1 5 4 2 1 5 4 3 1 5 4 3 2 我的代码如下以获得模式 但当计数器达到 1 并显示在相应的列值中时 我无法重
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • 扫描 PHP 上传的病毒

    我目前正在使用以下代码来扫描作为申请表的一部分上传的文件 safe path escapeshellarg dir file command usr bin clamscan stdout safe path out int 1 exec
  • 使用 IntlDateFormatter 转换非公历日期

    我应该如何使用将非公历日期转换为其他日历类型IntlDateFormatter 我要转换 1392 01 02 from persian to islamic日历 我尝试了以下代码 但它没有转换日历 formatter IntlDateFo
  • PHP多图像文件上传并存储到文件夹和数据库

    我正在建立一个网站 向夜间狂欢者展示大城市夜总会场所和活动的列表 我正在尝试构建一个后端页面 管理员可以在其中添加俱乐部并输入信息 例如机构名称 位置 相对价格等 当然还有俱乐部的一些图像 每个俱乐部必须至少有一张图像 即主图像 可以有额外
  • 我应该使用排队系统来处理付款吗?

    我在用着Slim https www slimframework com和这个结合Stripe 的 PHP 库 https stripe com docs api php在我的应用程序中处理付款 一切都很好 但是直到最近 我在我的系统中发现
  • 如何使用xquery查找节点并向其添加子节点?

    是否可以使用xpath xquery查询特定的xml节点 然后向其导入 添加子节点 示例 代码取自http codepad org gJ1Y2LjM http codepad org gJ1Y2LjM 这是在类似的问题中提出的 但不相同 1
  • 如何在 PHP >= 5.3 严格模式下向对象添加属性而不产生错误

    这必须很简单 但我似乎找不到答案 我有一个通用的 stdClass 对象 foo没有属性 我想添加一个新属性 bar尚未定义 如果我这样做 foo new StdClass foo gt bar 1234 严格模式下的 PHP 会抱怨 将属
  • SimpleXML插入处理指令(样式表)

    我想集成一个XSL文件在一个XML给我的字符串php CURL命令 我试过这个 output XML gived me by curl option hotel simplexml load string output hotel gt a
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu

随机推荐

  • Android 设备上而非模拟器上的 IndexOutOfBoundsException 错误

    这是我现在使用 Android 应用程序处理的问题 程序在模拟器上运行良好 没有任何错误 但在运行相同操作系统的真实设备上出错 我有一个应用程序小部件更新服务可以更新我的小部件 该服务检查小部件是否在屏幕上 否则不会执行更新过程 在模拟器上
  • nbconvert 使用“--allow-chromium-download”

    我尝试通过单击下载 PDF 形式的 Jupyter NotebookFile gt Download as gt Pdf通过 pyppeteer 这样做时我收到以下错误 nbconvert failed No suitable chromi
  • 如何使 PrimeFaces 选项卡“可链接”?

    我希望能够链接到 PrimeFaces 的 tabView 中的各个选项卡 换句话说 如果我的页面 test jsf 有一个带有标题为 Example 的选项卡的 tabView 我希望能够单击 Test jsf Example 的链接并自
  • Erlang 中的 begin...end 有何用途?

    我刚刚踩了一个begin end在 Erlang 的文档中 here http www erlang org doc reference manual expressions html id79819 但它没有给出一些例子来说明它是如何有用
  • Swift 2 中的反射

    我有一个类用户 import UIKit import ObjectMapper class User NSObject CustomStringConvertible Mappable var FirstName NSString var
  • 删除列中的重复数据

    我目前正在开发一个订购系统 客户可以在其中订购许多商品 我还有一位管理员 他 她可以在其中查看当天的所有订单 管理员可以查看客户姓名 应付总额 客户订购的产品和产品数量 我目前使用我的查询看到了这个结果 Name Payable Produ
  • HTML5 Canvas TextBaseline Top 在 Firefox 和 Chrome 中看起来不同

    在canvas中 当将textBaseline属性设置为 top 时 其在chrome和firefox中的渲染有所不同 在 Chrome 中 行和文本之间有间隙 而在 Firefox 中则没有间隙 请参考this http www w3sc
  • 静态成员变量,例如 OOP 语言

    我对 Go 还很陌生 然后我搜索了很多如何使用静态函数 变量 例如 C 的静态类 但是 我找不到任何对此问题有很好答案的内容 也许这个问题看起来很愚蠢 但我不喜欢当我不确定或当我不完全理解某事时 假设我们有这样的代码 public clas
  • 在 DockerFile 中定义 VOLUME 挂载点而不是 adhoc cmd-line -v 的目的是什么?

    据我所知 在 Dockerfile 中使用 VOLUME 命令可以定义容器内的安装点 FROM centos 6 VOLUME html 但是我注意到 如果没有该 VOLUME 定义 无论如何定义它 仍然可以安装在该 VOLUME 点上 d
  • Laravel 5.4 在 Markdown Mailable 中错误地混合了 HTML 组件

    我有普通的 Mailable 其中有一些硬编码的内容 我已经发布了可邮寄的视图 将内容更改为 markdown 并替换 gt view with gt markdown 现在邮件已经有了很好的降价格式 然而 Laravel 在编译该 mar
  • 使用 Java 从 HTTPS 服务器下载文件 [重复]

    这个问题在这里已经有答案了 我想从使用安全连接协议 HTTPS 的服务器下载文件 我可以在普通服务器上做到这一点 但是 我如何使用 HTTPS 做到这一点 如果有人使用过示例 API 请帮助我找到有用的资源 使用 Java 访问 HTTPS
  • com.zaxxer.hikari.pool.PoolInitializationException:池初始化期间出现异常

    我目前有一个连接到我的主数据库的开放池 并且它运行良好 但现在 我想为另一个数据库打开一个新池 我完全按照我设置第一个池的方式设置了新池 显然我编辑了数据库名称等 当我加载 setupHikari 方法时没有出现错误 但一旦实际语句即将运行
  • 使用 Rails 3.2.* 和 Postgres 的字符串与文本 - 我应该只使用文本吗

    我采用了一个 Rails 应用程序 Rails 3 2 和 Postgres 9 4 它有一些 Rails 字符串 并且我们已经超过了 255 个限制 该应用程序之前使用 MySQL 而不是 Postgres 作为后备存储 我的理解是 po
  • 在 AngularJS 中处理服务器重定向到 Facebook 登录页面

    我有一个 AngularJS 应用程序和一个带有 ASP NET Identity 2 0 的 WebApi2 我正在尝试使用 Facebook 帐户登录用户 我在用这个答案 https stackoverflow com a 213589
  • 获取连接的智能手表的电池电量

    作为 Wear API 的一部分 是否可以获取已连接智能手表的电池电量 最好不需要在智能手表上部署实际的佩戴组件 然后在手表和设备之间来回通信 我见过一些穿戴应用程序可以在手表本身上显示手表的电池电量 但我只是想了解手表当前的电池电量使用电
  • 如何使用 ExecutorService Java 减少到达 Runnable 类的 run 方法的时间延迟

    我试图实现一个实时执行应用程序 其中按钮单击事件将任务分配给 Thread 该任务将调用MIDI方法播放一些音乐 单击按钮时必须立即开始播放音乐 并有一小段延迟 midi代码在Runnable类的run方法中实现 但是要在按钮单击事件本身发
  • 使用 CFStringGetHyphenationLocationBeforeIndex 添加连字符

    我正在制作一本带有核心文本的杂志 我试图自动在文本中添加连字符 我想我可以用这个功能来做到这一点 CFStringGetHyphenationLocationBeforeIndex 但它不起作用 我在网上找不到任何示例 我想要做的是设置文本
  • 如何在 Clojure 中捕获多个异常?

    我的 Clojure 代码有一些 java 互操作 其中的方法会引发多个异常 我希望与他们每一个人打交道 根据 Clojure 文档 try expr catch clause finally clause catch clause gt
  • jQuery.POST - 使用 Form.Serialize() 传递另一个参数 - Asp.net MVC 3

    当我正在开发 Asp Net MVC 应用程序时 在我的应用程序中我使用jQuery POST提交表单的方法 e g jQuery post Product Save jQuery document forms 0 serialize fu
  • 查找并附加某个类的 href

    我一直在寻找解决方案 但尚未找到正确的方法 情况是这样的 我需要找到给定类的页面上的所有链接 例如class tracker 然后在末尾附加查询字符串值 因此当用户加载页面时 这些某些链接会使用一些动态信息进行更新 我知道如何做到这一点Ja