我写了这个微小的Python片段,它抓取一个feed并将其打印出来.当我运行代码时,Feed中的某些内容会触发您在此处看到的错误消息作为我的问题.这是错误的完整控制台输出:
> Traceback (most recent call last):
> File "/home/vijay/ffour/ffour5.py",
> line 20, in <module>
> myfeed() File "/home/vijay/ffour/ffour5.py", line
> 15, in myfeed
> sys.stdout.write(entry["title"]).encode('utf-8')
> AttributeError: 'NoneType' object has
> no attribute 'encode'
Run Code Online (Sandbox Code Playgroud) 当用户在我的网站上输入电子邮件时,我会发送包含链接的电子邮件验证电子邮件.链接看起来像:
http://mysite.com/VerifyEmail?email=name@domain.com&token=12341234
此特定用户的电子邮件包含"+"(加号),因此链接如下所示:
http://mysite.com/VerifyEmail?email=foo+bar@domain.com&token=12341234
单击链接时(至少在Firefox中)加上替换为空格.
问题:我在.net中使用什么URL编码功能来逃避加号.
注意:Uri.EscapeUriString(email)叶子加完整.
我正在使用.NET,我需要截断一个可能包含多字节字符的字符串,以便在URL编码后它不会超过设定的长度.这似乎是内置的东西,但我找不到它.
一旦它被URL编码,我只会做一个子字符串,但这可能会取消编码字符的一部分(空格变为%20,如果它在最后它可能被截断为%2,这是无效的),或者多字节字符的一部分会被截断(π被编码为%CF%80,它可能被截断为%,%CF,%CF%8,所有这些都是错误的).
根据http://ayende.com/blog/4599/hunt-the-bug,我遇到了其中一种情况,即"在这种情况下无法提供响应".
非常简化,以下内容在Windows Server 2008/IIS7/ASP.NET 4.0的某些情况下引发异常
public class Global : HttpApplication
{
public void Application_Start(object sender, EventArgs e)
{
HttpUtility.UrlEncode("Error inside!");
}
}
Run Code Online (Sandbox Code Playgroud)
我见过的解决方案涉及以下其中一项:
也许这不是我最好的谷歌搜索日,但如何实现HttpEncoder.Default?
建议?
我有一个Spring-MVC应用程序,Freemarker作为视图组件.
在我的模板中,生成了几个指向我的应用程序的链接,其中包含包含哈希键(#)的URL参数.
例:
参数: Q#106368 11
Freemarker使用编码的参数生成的URL: testurl.html?key=Q%23106368%2011
我使用JavaScript重定向到这个URL(原因:我使用JS来同时管理2帧的加载).
重定向方法很简单:
function redir(url) {
window.location.href = url;
}
Run Code Online (Sandbox Code Playgroud)
Freemarker生成的JS调用看起来像
<a href="javascript:redir('http://localhost:8080/testappp/testurl.html?key=Q%23106368%2011');">test</a>
Run Code Online (Sandbox Code Playgroud)
我的问题是浏览器/ Javascript转换回URL编码参数,认为有一个#并切断那里.
当我window.location.href='http://...'直接使用它的工作原理.只有在使用方法参数时,它似乎是神奇的URL解码,然后重定向失败,因为URL被切断了#.
有没有一种简单的方法来正确传输参数?
我知道我可以在模板中替换#例如with $$$hash$$$,并再次在服务器端进行替换.但是有很多地方我不得不改变......
我有一个javascript,它将一些特定的信息发送到PHP api.在发送之前它执行encodeURI.如何在PHP中"解码"它?我知道urldecode/urlencode与javascript编码/ decodeURI不同所以我可以使用什么?
我正在使用标准的Zend /public/.htaccess文件(如下所示).
目前我正在尝试将用户转发到特定的控制器/操作,并提供on-success-redirect URL作为URL参数.
生成的URL(通过Zend的URL视图助手组装和编码)如下所示:
localhost/crop/index/successRedirect/localhost%2Fprofile%2Fbasic
Run Code Online (Sandbox Code Playgroud)
但是这种模式显然违反了默认的Zend包mod_rewrite规则:访问URL会产生标准的Apache 404错误; Zend没有收到请求.
当手动重新形成最终参数时,请求按预期工作:
localhost/crop/index/?successRedirect=localhost%2Fprofile%2Fbasic
Run Code Online (Sandbox Code Playgroud)
然而,这需要一个hackish,两步URL生成过程.如果视图助手生成的URL独立工作,那将是理想的选择.
可以做些什么来允许url-encoding通过?任何见解将不胜感激!
这些是我的.htaccess的内容
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)
像这样启用RewriteLog不会为失败的模式生成输出:
RewriteLogLevel 9
RewriteLog "<path>/rewrite.log"
Run Code Online (Sandbox Code Playgroud)
我尝试了以下两个Q&A提出的解决方案,没有变化:
AllowEncodedSlashes On)QSA指令重写规则).htaccess mod-rewrite zend-framework url-rewriting urlencode
我在另一个与urlencode()相关的论坛中问了一个问题,当一个人看起来轻快地说它绝对需要在它上面使用htmlentities时,并且还建议我每次写一个URL都应该这样做."为了有效和安全,他说".我不明白为什么它可能是一个安全问题.这是他提到的代码:
echo '<a href="index.php?' . htmlentities('page=encode&code='.urlencode($code).'&login='.urlencode($login).'&codeconf=' . urlencode($codeconf)) . '">';
Run Code Online (Sandbox Code Playgroud)
PHP手册确实提到了htmlentities.但没有进一步的解释:
注意... PHP支持通过arg_separator .ini指令将参数分隔符更改为W3C建议的分号.不幸的是,大多数用户代理不以这种分号分隔格式发送表单数据.一种更便携的方法是使用&而不是&作为分隔符.您不需要为此更改PHP的arg_separator.保留为&,但只需使用htmlentities()或htmlspecialchars()对您的URL进行编码.
我换成"&"通过与放大器; ,我在W3C验证器中验证了我的页面,它出来了.
我仍然担心这个问题.
Windows中的certutil可用于执行Base64编码和解除.是否有用于URL编码和解码的内置实用程序?网上有很多免费工具.但我特意寻找Windows内置实用程序或者不是可以在Windows上运行的简单脚本.
谢谢!
我正在使用PlaceAutocomplete一个地名,然后我将其编码并作为GET请求的一部分(在URL中)发送到远程主机.
在远程主机上,我发现某些用户设备正在发送被转义的单引号,这会导致问题,因为地名是作为URL的一部分发送的.
例如" Andy's Place"被发送为" Andy\'s Place"
\当部分URL出于显而易见的原因时,反斜杠是一个问题.
...但大多数情况下,这不会发生......例如,在我自己的测试设备上,它不会......这个地方被发送/接收为" Andy's Place".
我试图从头到尾经历链条,看看可能发生意外逃逸的地方.我试图总结下面的链,遗漏了一些东西(例如我不仅发送了placeName,我也发送了其他东西)...我希望我已经包含了所有重要的内容:
Place place = PlaceAutocomplete.getPlace(this, data);
String placeName = (String) place.getName();
EditText_placeName.setText(placeName);
// ... later ...
String newPlaceName = EditText_placeName.getText().toString();
String encodedPlaceName = Uri.encode(newPlaceName);
URL url = new URL(strBaseURL + '/' + encodedPlaceName);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
responseCode = connection.getResponseCode();
Run Code Online (Sandbox Code Playgroud)
上面的链中是否有任何东西可以在某些设备上的URL中引入不需要的转义字符而不是其他设备?
作为一种脚注,我知道通过POST(在正文中)而不是GET(作为URL的一部分)发送数据可能会更好(可能完全解决我的问题),事实上这就是我现在的情况走向,但我仍然想知道这个\角色是如何通过上述链条,至少部分是出于好奇.