我想了解我应该如何处理 URLs 中的字符,这是因为我正在构建一个网站,用户可以在其中存储内容并通过在 URL 中将其名称数字化来转到内容页面。 .
所以,类似于 Wikipedia或 Last.FM网站。
我在网站上看到,用户可以这样写
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentemøller</a>并且可以到达艺术家的页面。
页面加载后,如果我复制 URL,我会看到写成:
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentemøller</a>但如果我将它粘贴到文本编辑器中,它将被粘贴为
<a href="http://it.wikipedia.org/wiki/Trentem%C3%B8ller" rel="noreferrer noopener nofollow">http://it.wikipedia.org/wiki/Trentem%C3%B8ller</a>
所以字符 ø粘贴为 %C3%B8
当然对于这样的URL也是一样的(画师小林武的页面)
<a href="http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://www.last.fm/music/小林武史</a>
<a href="http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://www.last.fm/music/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2</a>
如果我对第一个或第二个数字进行数字化,该页面在任何情况下都可以正常工作,为什么?
我想我应该对 .htacces 做些什么和 mod_rewrite但我不确定,特殊字符是否自动转换为 url 特殊字符?
然后,我该怎么做才能让 PHP 对内容名称进行正确的查询?
如果我有一张像这样的 table
table_users
- username
- age
- height
- weight
- sex
- email
- country
我可以 mod_rewrite写一个像 <a href="http://mysite.com/user/bob" rel="noreferrer noopener nofollow">http://mysite.com/user/bob</a> 这样的地址得到username鲍勃来自 table_users但是<a href="http://mysite.com/user/%E5%B0%8F%E6%9E%97%E6%AD%A6%E5%8F%B2" rel="noreferrer noopener nofollow">http://mysite.com/user/小林武史</a>呢? ?
这里我展示了一个我想做的简单例子:
#.htaccess
RewriteEngine On
RewriteRule ^(user/)([a-zA-Z0-9_+-]+)([/]?)$ user.php?username=$2
<?php
// this is the page user.php
// this is the way I use to get the url value
print $_REQUEST["username"];
?>
这行得通,但它仅限于 [a-zA-Z0-9_+-],如何像其他字符一样与所有字符更兼容而又不会损失太多安全性?
有人知道避免麻烦的方法吗?
最佳答案
试试 urlencode 和 urldecode
编辑:
下面是url编解码的直观描述
http://blog.neraliu.com/wp-content/uploads/2009/10/url-encoding.png
关于php - 如何处理像 Last.FM 或维基百科这样的社区 URL 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2128756/
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解
从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b