我有一个网址,网址中的参数是人类有意义的。但在转换后,网址包含许多字符,如“%5B%5D”,我应该如何防止网址被转换。
答案 0 :(得分:3)
%NN
是在网址中表示非ascii字符的唯一正确方法。
你无法阻止它。如果客户不能(或者不想)将他们呈现在"权利"方式 - 他们将是%'
答案 1 :(得分:1)
标题示例:
$title = 'Exämplé strîng ìnclüding spéciâl chàrãctêrs and (söme) [brackets].';
有效的网址编码:
$title = 'Exämplé strîng ìnclüding spéciâl chàrãctêrs and (söme) [brackets].';
$title = urlencode($title) ;
// Result: Ex%C3%A4mpl%C3%A9+str%C3%AEng+%C3%ACncl%C3%BCding+sp%C3%A9ci%C3%A2l+ch%C3%A0r%C3%A3ct%C3%AArs+and+%28s%C3%B6me%29+%5Bbrackets%5D.
urlencode()函数对每个非ascii字符进行编码
必须以这种方式对URL进行编码才能正常工作
幸运的是,你可以用这样的东西使它具有人类可读性:
(删除非ascii字符/用下划线替换空格)
$title = 'Exämplé strîng ìnclüding spéciâl chàrãctêrs and (söme) [brackets].';
$title = iconv('UTF-8', 'US-ASCII//TRANSLIT', $title);
$title = preg_replace('/[^A-Za-z0-9 ]/', '', $title );
$title = str_replace(' ','_',$title);
// Result: Example_string_including_special_characters_and_some_brackets
总之,创建以下网址:
"http://www.site.com/blog.php?Article=Example_string_including_special_characters_and_some_brackets"
而不是:
"http://www.site.com/blog.php?Article=Ex%C3%A4mpl%C3%A9+str%C3%AEng+%C3%ACncl%C3%BCding+sp%C3%A9ci%C3%A2l+ch%C3%A0r%C3%A3ct%C3%AArs+and+%28s%C3%B6me%29+%5Bbrackets%5D."
答案 2 :(得分:0)
实际上,它确实与渲染引擎有关,你无法摆脱它。对于像壁虎这样的东西,尽管经过改造,但它可以用人类可读的形式展示。
答案 3 :(得分:0)
您是在谈论何时显示网址,还是将其用作href值?
如果您希望它显示得很好,可以通过urldecode()
运行它。根据其他答案,在href值内,它必须看起来像这样,或者URL可能会在某些浏览器和服务器中中断,因此最好让它看起来像那样。