php rawurlencode()在不同服务器上的结果不同

php rawurlencode()在不同服务器上的结果不同,php,forms,urlencode,url-encoding,rawurl,Php,Forms,Urlencode,Url Encoding,Rawurl,在专用服务器上: $_POST['kannada']='ಕನ್ನಡ'; rawurlencode($_POST['kannada']); 给予 %26%233221%3B%26%233240%3B%26%233277%3B%26%233240%3B%26%233233%3B %E0%B2%95%E0%B2%A8%E0%B3%8D%E0%B2%A8%E0%B2%A1 在我的本地服务器上: $_POST['kannada']='ಕನ್ನಡ'; rawurlencode($_POST['kann

在专用服务器上:

$_POST['kannada']='ಕನ್ನಡ';
rawurlencode($_POST['kannada']);
给予

%26%233221%3B%26%233240%3B%26%233277%3B%26%233240%3B%26%233233%3B
%E0%B2%95%E0%B2%A8%E0%B3%8D%E0%B2%A8%E0%B2%A1
在我的本地服务器上:

$_POST['kannada']='ಕನ್ನಡ';
rawurlencode($_POST['kannada'])
给予

%26%233221%3B%26%233240%3B%26%233277%3B%26%233240%3B%26%233233%3B
%E0%B2%95%E0%B2%A8%E0%B3%8D%E0%B2%A8%E0%B2%A1
预期结果是我在本地服务器上得到的结果。为什么会有不同的结果?请告诉我

嗯。下面是我在不同服务器上运行的文件。你可以查一下

<!DOCTYPE html>
<html lang="kn">
<head>
<meta charset="UTF-8" />
</head>
<body>
<form name="submit" method="post">
<input type="text" name="kannada">
<input type="submit" name="submit">
</form>
<?php
if(isset($_POST['submit']))
{
    echo $_POST['kannada']."<br/>";
    echo rawurlencode($_POST['kannada']);
}
?>
</body>
</html>
您的两个字符串完全不同,即使在HTML上下文中呈现时,它们看起来相同

编辑1:实际上可以在POST变量中获取HTML实体,但这是浏览器的一项功能:如果用户在HTML表单中键入一些文档编码不支持的字符,则浏览器更愿意生成HTML实体,而不是发送或删除不支持的字符。但是你需要一个浏览器;如果您从PHP手动填写$\u POST,则不会发生这种情况

编辑2:正如我所怀疑的,你发布的代码不是真实的代码。您的输入字符串不同,但您没有注意到,因为您正在将表单数据作为HTML进行操作:

echo $_POST['kannada']."<br/>";
您的两个字符串完全不同,即使在HTML上下文中呈现时,它们看起来相同

编辑1:实际上可以在POST变量中获取HTML实体,但这是浏览器的一项功能:如果用户在HTML表单中键入一些文档编码不支持的字符,则浏览器更愿意生成HTML实体,而不是发送或删除不支持的字符。但是你需要一个浏览器;如果您从PHP手动填写$\u POST,则不会发生这种情况

编辑2:正如我所怀疑的,你发布的代码不是真实的代码。您的输入字符串不同,但您没有注意到,因为您正在将表单数据作为HTML进行操作:

echo $_POST['kannada']."<br/>";

第一个结果是Unicode字符集

mb_convert_encoding($unicode_content, 'UTF-8', 'HTML-ENTITIES');

第一个结果是Unicode字符集

mb_convert_encoding($unicode_content, 'UTF-8', 'HTML-ENTITIES');


这两台服务器之间使用的字符集很可能有所不同。我猜其中一台服务器,即PHP是UTF-8,另一台不是。嗨。我实际上在不同的服务器上运行了相同的文件。@KrishGowda确切地说..?是的。完全相同的文件。您很可能在两台服务器之间使用了不同的字符集。我猜其中一台服务器,即PHP是UTF-8,另一台不是。我实际上在不同的服务器上运行了相同的文件。@KrishGowda确切地说..?是的。完全相同的文件。是的。我更喜欢第二个,因为它将在URL中正确呈现。这实际上不仅仅是偏好的问题。如果您接受来自不受信任来源的HTML,则可能会受到XSS攻击,除非您实施精心编制的安全措施。如果你只接受纯文本,一切都会变得容易。现在安全性不是问题。这是一个简单的网站。我的客户想要好看的URL。这是一个好政策。这样,您可以在每次网站被黑客攻击时向客户收费:你是对的。编辑器未正确保存文件。是我干的。文件另存为>选中包含unicode签名>选项,然后将文件上载到服务器并运行。我得到了第二种编码,这是我在本地使用的。是的。我更喜欢第二个,因为它将在URL中正确呈现。这实际上不仅仅是偏好的问题。如果您接受来自不受信任来源的HTML,则可能会受到XSS攻击,除非您实施精心编制的安全措施。如果你只接受纯文本,一切都会变得容易。现在安全性不是问题。这是一个简单的网站。我的客户想要好看的URL。这是一个好政策。这样,您可以在每次网站被黑客攻击时向客户收费:你是对的。编辑器未正确保存文件。是我干的。文件另存为>选中包含unicode签名>选项,然后将文件上载到服务器并运行。我得到了第二种类型的编码,这是我在本地使用的。
<?php
//UNICODE
$a = rawurldecode("%26%233221%3B%26%233240%3B%26%233277%3B%26%233240%3B%26%233233%3B");

//UTF-8
$b = rawurldecode("%E0%B2%95%E0%B2%A8%E0%B3%8D%E0%B2%A8%E0%B2%A1");

//Convert to utf-8
echo mb_convert_encoding($a, 'UTF-8', 'HTML-ENTITIES');
echo "\r\n";
echo $b;