- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用 DOMDocument()
,我正在替换 $message
中的链接并添加一些内容,例如 [@MERGEID]
。当我使用 $dom_document->saveHTML()
保存更改时,链接得到“某种” url 编码。 [@MERGEID]
变为 %5B@MERGEID%5D
。
稍后在我的代码中,我需要用 ID 替换 [@MERGEID]
。所以我搜索 urlencode('[@MERGEID]')
- 然而,urlencode()
将符号 (@) 处的商业广告更改为 %40,而 saveHTML() 已将其保留。所以没有匹配 - '%5B@MERGEID%5D' != '%5B%40MERGEID%5D'
现在,我知道可以运行 str_replace('%40', '@', urlencode('[@MERGEID]'))
来获取在 $message 中定位合并变量所需的内容.
我的问题是,DOMDocument 使用的是什么 RFC 规范,为什么它与 urlencode 甚至 rawurlencode 不同?我能做些什么来保存 str_replace 吗?
演示代码:
$message = '<a href="http://www.google.com?ref=abc" data-tag="thebottomlink">Google</a>';
$dom_document = new \DOMDocument();
libxml_use_internal_errors(true); //Supress content errors
$dom_document->loadHTML(mb_convert_encoding($message, 'HTML-ENTITIES', 'UTF-8'));
$elements = $dom_document->getElementsByTagName('a');
foreach($elements as $element) {
$link = $element->getAttribute('href'); //http://www.google.com?ref=abc
$tag = $element->getAttribute('data-tag'); //thebottomlink
if ($link) {
$newlink = 'http://www.example.com/click/[@MERGEID]?url=' . $link;
if ($tag) {
$newlink .= '&tag=' . $tag;
}
$element->setAttribute('href', $newlink);
}
}
$message = $dom_document->saveHTML();
$urlencodedmerge = urlencode('[@MERGEID]');
die($message . ' and url encoded version: ' . $urlencodedmerge);
//<a data-tag="thebottomlink" href="http://www.example.com/click/%5B@MERGEID%5D?url=http://www.google.com?ref=abc&tag=thebottomlink">Google</a> and url encoded version: %5B%40MERGEID%5D
最佳答案
我相信这两种编码有不同的用途。 urlencode()
编码 "a string to be used in a query part of a URL" , 而 $element->setAttribute('href', $newlink);
对要用作 URL 的完整 URL 进行编码。
例如:
urlencode('http://www.google.com'); // -> http%3A%2F%2Fwww.google.com
这对于编码查询部分很方便,但不能用于<a href='...'>
。 .
但是:
$element->setAttribute('href', $newlink); // -> http://www.google.com
将正确编码字符串,以便它在 href
中仍然可用。 .它无法编码 @
的原因因为它无法判断是否 @
是查询的一部分还是 userinfo
的一部分或 email
网址(例如:mailto:invisal@google.com
或 invisal@127.0.0.1
)
而不是使用 [@MERGEID]
, 你可以使用 @@MERGEID@@
.然后,稍后用您的 ID 替换它。此解决方案甚至不需要您使用 urlencode
.
如果你坚持使用urlencode
,您可以只使用 %40 而不是 @。所以,你的代码将是这样的 $newlink = 'http://www.example.com/click/[%40MERGEID]?url=' . $link;
您还可以执行类似 $newlink = 'http://www.example.com/click/' . urlencode('[@MERGEID]') . '?url=' . $link;
的操作
关于php - DOMDocument->saveHTML() vs urlencode with commercial at symbol (@),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302431/
我正在编写一个 Web 应用程序并学习如何对 html 链接进行 urlencode... 这里的所有 urlencode 问题(参见下面的标签)都是“如何...?”问题。 我的问题不是“如何?”但“
Dart 中有进行 urlencoding 的函数吗?我正在使用 XMLHttpRequest 对象进行 AJAX 调用,并且需要对 url 进行 url 编码。 我在 dartlang.org 上进
我们有一些非常基本的 mod_rewrite 规则: RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302
Server.UrlEncode 和 HttpUtility.UrlEncode 之间有区别吗? 最佳答案 我之前对这些方法感到非常头疼,我建议您避免 UrlEncode 的任何变体,而是使用 Uri
在PHP中: php -r "echo urlencode('["IM"]'); " 结果是%5BIM%5D 但是在java中 String text = URLEncoder.encode('["
From Python 的 urllib.urlencode 的 java 等价物是什么? 喜欢 >>> urllib.urlencode({'abc':'d f', 'def': '-!2'}) '
我发现了一个奇怪的问题,即 urlencoding 行为不一致。 更新 Spring MVC 4.3 和 5.1 版本之间存在差异: // FAIL in MVC 4.x @Test public v
express 框架带有 express 函数 express.json() 和 express.urlencoded()。 我们有 body-parser 库,它似乎具有相同的功能。 我的问题是,b
所以我正在处理的站点有一个过滤系统,它通过一个查询字符串传递一个键和值系统来运行。 整个站点很快就会进行重构,我正在维护现有站点,因此在我们讨论实现这一点的正确方法之前,我只需要更改分隔符的想法。 现
Dart中有进行urlencoding的功能吗?我正在使用XMLHttpRequest对象进行AJAX调用,我需要对该URL进行URL编码。 我在dartlang.org上进行了搜索,但没有得到任何结
我正在创建一个涉及将中文字符作为 url 参数发送的 php 应用程序。 我必须发送如下查询: http://xyz.com/?q=New 但是 xyz.com 的脚本不会自动对中文字符进行编码。因此
全部, 有个文字区说 如果用户给出输入, here is my name and my mail id is "a@x.com" 当数据在服务器端发布时,数据被接收为 这是我的名字,我的邮件
我想使用java的URLEncoder class编码我的 url 字符串。但是,默认情况下它将空格转换为“+”(加号)。我希望它改用“-”(类似于本网站对其网址进行编码的方式)。 我想知道最好的方法
我想对以下内部模板进行 url 编码 {{address.street}} {{address.city}} {address.state}} 无论如何在模板端执行此操作并将其放入href(我不希望将
我想在控制台应用程序VB.NET,VS 2010 Beta 2中使用HttpUtility.UrlEncode。 System.Web.HttpUtility.UrlEncode(item) 错误消息
我有一个服务堆栈应用程序,一个测试服务收到一个简单的请求,但是我发现收到的请求的值与原始请求不匹配。 我发:http://localhost/testapp/test?value=%22test%20
有没有办法对路径中的目录分隔符/进行 urlencode ? 喜欢 urlencode('/this/is/my/file right here.jpg'); 最佳答案 你可以使用 explode将您
是否可以在不转换 # 或 % 的情况下运行 urlencode 函数? 最佳答案 你能不能只做: $str = urlencode($str); $str = str_replace("%23", "
我正在尝试使用可选参数 shown in the docs 对 Django 1.3 中包含斜杠的字符串进行 URL 编码: {{ someString|urlencode:"" }} 但是,斜杠不会
我无法快速找到谷歌答案,而且我面前没有帮助(长话短说),所以,我的问题是:是否有一种简单的方法可以在 MS Visual 中对字符串进行 URL 编码FoxPro 8 最佳答案 这是一个可以满足您需要
我是一名优秀的程序员,十分优秀!