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

Php 将href中的UTF-8字符集更改为ISO/IEC 8859-2:1999,php,html,Php,Html,我有一个非常简单的表单,由两个文件组成: 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 <?p

我有一个非常简单的表单,由两个文件组成:

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”中填写波兰语字符(łąźćęó)

当您单击“发送脚本”时,脚本将生成以下表单的链接:

"<a href='http://myaddress/l a ź ć e ó/'>NAME</a>"
“”
链接应以以下形式生成:

"<a href='http://myaddress/%B3+%B1+%BC+%E6+%EA+%F3/'>NAME</a>"
“”
您是否尝试过:

<?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>"
$name=urlencode($_POST['name']);
回声“”
这将导致类似的结果

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


编码形式为或“URL编码”。您可以使用函数生成它。该函数获取字符串的原始字节,并将它们转换为百分比编码组。因此,确切的输出取决于输入的字节数,即文本的编码方式

如果您需要“ź”编码到
%BC
,那么它必须用ISO-8859-2编码(如您所说)。有两种方法可以做到这一点:

  • 通过添加适当的属性,确保您的表格以ISO-8859-2的形式提交:

    <form accept-charset="iso-8859-2">
    
  • 然后
    rawurlencode($name)
    将导致
    %B3+%B1+%BC+%E6+%EA+%F3

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