2024年PHP开发者大会日本站

urlencode

(PHP 4, PHP 5, PHP 7, PHP 8)

urlencodeURL 编码字符串

描述

urlencode(string $string): string

此函数在将字符串编码为用于 URL 查询部分时非常方便,它是一种方便的方式将变量传递到下一页。

参数

string

要编码的字符串。

返回值

返回一个字符串,其中所有非字母数字字符(除了 -_.)都已替换为百分号 (%) 后跟两位十六进制数字,空格编码为加号 (+) 符号。它的编码方式与 WWW 表单的已发布数据相同,与 application/x-www-form-urlencoded 媒体类型相同。由于历史原因,这与 » RFC 3986 编码(参见 rawurlencode())不同,空格编码为加号 (+) 符号。

示例

示例 #1 urlencode() 示例

<?php
$userinput
= 'Data123!@-_ +';
echo
"UserInput: $userinput\n";
echo
'<a href="mycgi?foo=', urlencode($userinput), '">';
?>

以上示例将输出

UserInput: Data123!@-_ +
<a href="mycgi?foo=Data123%21%40-_+%2B">

示例 #2 urlencode()htmlentities() 示例

<?php
$foo
= 'Data123!@-_ +';
$bar = "Not the same content as $foo";
echo
"foo: $foo\n";
echo
"bar: $bar\n";
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo
'<a href="mycgi?' . htmlentities($query_string) . '">';
?>

以上示例将输出

foo: Data123!@-_ +
bar: Not the same content as Data123!@-_ +
<a href="mycgi?foo=Data123%21%40-_+%2B&amp;bar=Not+the+same+content+as+Data123%21%40-_+%2B">

注释

注意:

小心那些可能与HTML实体匹配的变量。诸如 &amp、&copy 和 &pound 之类的字符会被浏览器解析,实际的实体会被使用,而不是预期的变量名。这是一个显而易见的问题,W3C 多年来一直在告知人们。参考资料在此:» http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2

PHP 支持通过 arg_separator .ini 指令将参数分隔符更改为 W3C 建议的分号。不幸的是,大多数用户代理不会以分号分隔的格式发送表单数据。解决此问题的更可移植的方法是使用 &amp; 而不是 & 作为分隔符。为此,您无需更改 PHP 的 arg_separator。将其保留为 &,只需使用 htmlentities()htmlspecialchars() 编码您的 URL。

参见

添加注释

用户贡献的注释 6 个注释

davis dot peixoto at gmail dot com
14 年前
urlencode 函数和 rawurlencode 主要基于 RFC 1738。

但是,自 2005 年以来,当前使用的 URI 标准 RFC 是 RFC 3986。

这是一个根据 RFC 3986 编码 URL 的函数。

<?php
function myUrlEncode($string) {
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
return
str_replace($entities, $replacements, urlencode($string));
}
?>
temu92 at gmail dot com
15年前
我需要对UTF8 URL进行编码和解码,我编写了这些非常简单的函数。希望对您有所帮助!

<?php
function url_encode($string){
return
urlencode(utf8_encode($string));
}

function
url_decode($string){
return
utf8_decode(urldecode($string));
}
?>
[email protected]
1年前
此函数将在保留URL功能的同时对URL进行编码,因此您可以将其复制粘贴到浏览器中。
```
function urlEncode($url) {
$parsedUrl = parse_url($url);

$encodedScheme = urlencode($parsedUrl['scheme']);
$encodedHost = urlencode($parsedUrl['host']);

$encodedPath = implode('/', array_map('urlencode', explode('/', $parsedUrl['path'])));
if (isset($parsedUrl['query'])) {
$encodedQuery = '?' . urlencode($parsedUrl['query']);
} else {
$encodedQuery = '';
}

return "{$encodedScheme}://{$encodedHost}{$encodedPath}{$encodedQuery}";
}
```
[email protected]
15年前
如果文本包含电子邮件地址,请不要使用urlencode()或urldecode(),因为它会破坏“+”字符,这是一个完全有效的电子邮件地址字符。

除非您确定不会对电子邮件地址进行编码,并且需要非标准“+”用法提供的可读性,否则始终使用rawurlencode()或rawurldecode()。
[email protected]
14 年前
我需要一个PHP函数来完成与Javascript中complete escape函数相同的工作。我花了一些时间才找到它,但最终我决定编写自己的代码。所以为了节省时间

<?php
function fullescape($in)
{
$out = '';
for (
$i=0;$i<strlen($in);$i++)
{
$hex = dechex(ord($in[$i]));
if (
$hex=='')
$out = $out.urlencode($in[$i]);
else
$out = $out .'%'.((strlen($hex)==1) ? ('0'.strtoupper($hex)):(strtoupper($hex)));
}
$out = str_replace('+','%20',$out);
$out = str_replace('_','%5F',$out);
$out = str_replace('.','%2E',$out);
$out = str_replace('-','%2D',$out);
return
$out;
}
?>

可以使用Javascript中的unescape函数完全解码。
[email protected]
17年前
正如之前“[email protected]”所写,您在将包含特殊字符的字符串编码到Flash时可能会遇到问题。Benjamin写道

<?php
function flash_encode ($input)
{
return
rawurlencode(utf8_encode($input));
}
?>

……可以解决这个问题。不幸的是,Flash仍然在读取某些引号时存在问题,但使用这个

<?php
function flash_encode($string)
{
$string = rawurlencode(utf8_encode($string));

$string = str_replace("%C2%96", "-", $string);
$string = str_replace("%C2%91", "%27", $string);
$string = str_replace("%C2%92", "%27", $string);
$string = str_replace("%C2%82", "%27", $string);
$string = str_replace("%C2%93", "%22", $string);
$string = str_replace("%C2%94", "%22", $string);
$string = str_replace("%C2%84", "%22", $string);
$string = str_replace("%C2%8B", "%C2%AB", $string);
$string = str_replace("%C2%9B", "%C2%BB", $string);

return
$string;
}
?>

……应该可以解决这个问题。
To Top