如何防止网址被转换?

时间:2011-04-24 10:35:51

标签: php url rewrite

我有一个网址,网址中的参数是人类有意义的。但在转换后,网址包含许多字符,如“%5B%5D”,我应该如何防止网址被转换。

4 个答案:

答案 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可能会在某些浏览器和服务器中中断,因此最好让它看起来像那样。