我使用此代码获取完整的URL:
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
Run Code Online (Sandbox Code Playgroud)
问题是我在我.htaccess身上使用了一些掩码,所以我们在URL中看到的并不总是文件的真实路径.
我需要的是获取URL,URL中写的内容,仅此而已 - 完整的URL.
我需要了解它在Web浏览器的导航栏中的显示方式,而不是服务器上文件的真实路径.
关于URL参数名称中允许哪些字符,是否有任何正式限制?
我一直在阅读RFC3986("统一资源标识符(URI):通用语法"),但没有得出明确的结论.
我知道有实际的限制,但实际上是禁止做类似的事情:
param with\funny<chars>=some_value
只要我正确地逃脱它:
param%20with%1cfunny%3cchars%3e=some_value
我正在寻找一种方法,将字符串编码为尽可能短的长度并让它可解码(纯PHP,没有SQL).我有工作脚本,但我对编码字符串的长度不满意.
场景:
链接到图像(取决于我想向用户显示的文件分辨率):
编码链接(因此用户无法猜测如何获取更大的图像):
所以,基本上我只想编码网址的搜索查询部分:
我现在使用的方法将上面的查询字符串编码为:
我使用的方法是:
$raw_query_string = 'img=/dir/dir/hi-res-img.jpg&w=700&h=500';
$encoded_query_string = base64_encode(gzdeflate($raw_query_string));
$decoded_query_string = gzinflate(base64_decode($encoded_query_string));
Run Code Online (Sandbox Code Playgroud)
如何缩短编码结果并仍然可以仅使用PHP 对其进行解码?
我正在尝试将一些带有 GET 请求的参数发送到查询字符串中的控制器。我将查询字符串中的所有参数Dictionary<string, string>使用[FromQuery]. 它运行良好,直到参数名称之一包含点 ( .) 符号。我检查了Request.Query对象,看起来它解析得很好,但是我的 Dictionary 对象得到了这个,确切的项目错误。所以它看起来像[FromQuery]活页夹中的错误,或者我做错了什么。下面的代码Request.Query和我的调试值parameters:
这是发送的查询字符串的样子:
?query=&InspectionType=Safety&ItemType=InspectionPoint&RecordParentGUID=9275bee2-0a2d-461c-8835-51880e76f035&parent.ResultClassCode=parent.ResultClassCode
更新:从在 .net 开发团队工作的 Eilon Lipton 得到答案,简而言之 - 这是设计使然。点号“.” 和 '[', ']' 是用于表示属性和索引器的特殊字符。完整答案在这里:https : //github.com/aspnet/Mvc/issues/6746
我有这个REST资源:
@GET
@Path("{business},{year},{sample}")
@Produces(MediaType.APPLICATION_JSON)
public Response getSample(
@PathParam("business") String business,
@PathParam("year") String year,
@PathParam("sample") String sampleId {
Sample sample = dao.findSample(business, year, sampleId);
return Response.ok(sample).build();
}
Run Code Online (Sandbox Code Playgroud)
sample例如,param可以包含斜杠字符:6576/M982。
很http://ip:port/samples/2000,2006,6576/M982明显,我正在用它来调用它,但是不起作用。
我也尝试过使用http://ip:port/samples/2000,2006,6576%2FM982,将斜杠编码为%2F,但也不起作用,也无法到达端点。
编辑
我正在使用Retrofit来调用端点,并且这样做:
@GET("/samples/{business},{year},{sampleId}")
Observable<Sample> getSampleById(
@Path("business") String business,
@Path("year") String year,
@Path(value = "sampleId", encoded = true) String sampleId);
Run Code Online (Sandbox Code Playgroud)
使用encoded = true,但仍然无法正常工作。