将UTF-8字符集更改为ISO/IEC 8859-2:1999



我有一个非常简单的表单,包含两个文件:

FORM.PHP

<form action="test.php" method="post">
<input type='text' name = 'name'  value="ł ą ź ć ę ó"  >    
<input id='submit' type='submit' name = 'submit' value="SEND">
</form>`

和TEST.PHP

<?php
$name = $_POST['name'];
echo "<a href='http://myaddress/$name/'>NAME</a>"
?>

在表单字段'name'中填写波兰语字符(ó)

当你点击SEND脚本生成一个链接的形式:

"<a href='http://myaddress/l a ź ć e ó/'>NAME</a>"

链接应该以以下形式生成:

"<a href='http://myaddress/%B3+%B1+%BC+%E6+%EA+%F3/'>NAME</a>"

%xx编码形式为percent-encoding或"URL encoding"。你可以用rawurlencode函数生成它。该函数接受字符串的原始字节,并将它们转换为百分比编码组。因此,确切的输出取决于您输入的字节数,这意味着您的文本使用的是哪种编码。

如果你需要"波兰"编码到%BC,那么它必须在ISO-8859-2编码(如你所说)。有两种方法可以得到:

  1. 通过添加适当的属性来确保您的表单按照ISO-8859-2提交:

    <form accept-charset="iso-8859-2">
    
  2. 如果你不提交你需要的编码,那么在服务器上转换它:

    $name = iconv('UTF-8', 'ISO-8859-2', $_POST['name']);
    

rawurlencode($name)应得到%B3+%B1+%BC+%E6+%EA+%F3

你试过了吗:

<?php
$name = $_POST['name'];
echo "<a href='http://myaddress/' . urlencode($name) . '/'>NAME</a>"
?>

您可以使用urlencode(str)。和urldecode(str)反转

$name = urlencode($_POST['name']);
echo "<a href='http://myaddress/$name/'>NAME</a>"

这将产生类似于

的内容
<a href='http://myaddress/%C5%82+%C4%85+%C5%BA+%C4%87+%C4%99+%C3%B3/'>NAME</a>

引用http://php.net/manual/en/function.urlencode.php

最新更新