使用编码UTF-8的GET从URL获取值

时间:2014-01-21 07:06:54

标签: php mysql encoding utf-8 character-encoding

让我首先说我不知道​​如何制定这个问题,我花了最近两天寻找以下几种方法。

我发送一些使用base64编码的信息如下.... 值是:
LómsGruñes
这个值来自输入框
因为我这样做 $ name = htmlentities(($ _POST ['name']),ENT_NOQUOTES,'UTF-8');
$ midn = htmlentities(($ _POST ['midn']),ENT_NOQUOTES,'UTF-8');
这个输出应该是

Lóms Gruñes

这就是编码,直到一切都很好,我可以做任何我需要的东西,在这种情况下我将使用base64编码它

 $datas ='&name='. $name .'&midn='. $midn;
    $bd = base64_encode($datas);
   // Now lets send that info to another file..
   header( 'Location: other.php?d=$db' ) ;

所以网址就像是 的 domain.com/other.php?d=TCZvYWN1dGU7bXMgR3J1Jm50aWxkZTtlcw ==

所以现在让我们解码它以便保存它......

$ds = base64_decode($_GET['d']);
parse_str($ds, $params);
$name = htmlentities($params['name'], ENT_NOQUOTES);
$midn = htmlentities($params['midn'], ENT_NOQUOTES);

它看起来很直接不是它......但是问题就在这里,因为当我尝试使用这些值时,没有任何事情发生......让我说我只想回应它......

echo $name . '<br>';
echo $midn;

我得到的是什么 的
格吕
那么ó和ñ在哪里? 好吧,假设我没有编码,所以URL看起来像这样......

    domain.com/other.php?name=L&oacute;ms&midn=Gru&ntilde;es
// and the I use echo like this:
echo $_GET['name'] . '<br>';
echo $_GET['midn'];
// the output is
L
Gru

即使我把:header('Content-type:text / html; charset = utf-8');在<?php之后......没有任何事情发生......所以,问题是......我怎样才能将&oacute;作为一个值或更好的,我怎样才能发送í,ó,ñ, á...等在urldomain.com/file.php?data=íÄÑó中,然后按原样检索并按原样保存并按原样显示...
我不确定这是否有相关信息,数据将保存在DB中,数据库是InnoDB,utf8_general_ci

谢谢你抽出时间......

3 个答案:

答案 0 :(得分:0)

首先,如果要解码htmlentities,请尝试html_entity_decode()。 要对网址进行编码,请尝试urlencode()。

来自php.net的例子:

<?php
    $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
    echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>

希望它有所帮助!

答案 1 :(得分:0)

这可能会对你有用。我没有使用htmlentites,而是使用了rawurlencode和rawurldecode函数。

下面是相同的代码

  1. 首先从
  2. 获取值
      

    $ name = rawurlencode('LómsGruñes'); use可以使用//($ _POST ['name']

    $mid = rawurlencode('Gru&ntilde;es'); and here ($_POST ['midn'] )
    

    然后

     echo $datas ='name='. $name .'midn='. $midn;
        $en = base64_encode($datas);
    

    将此附加到下一个网址。然后获取值并使用base64_decode函数解码它

    $dd = base64_decode($en);
    parse_str($dd);
    echo $name;
    echo $midn;
    

答案 2 :(得分:0)

始终使用您正在使用的技术进行转义/编码。

从表单提交中获取UTF-8编码值:

$name = $_POST['name'];
$midn = $_POST['midn'];

将这些输出为HTML:

<p><?php echo htmlspecialchars($name, ENT_COMPAT, 'UTF-8'); ?></p>

将它们嵌入网址:

$url = sprintf('foo.php?name=%s&midn=%s', rawurlencode($name), rawurlencode($midn));

// or

$url = 'foo.php?' . http_build_query(array('name' => $name, 'midn' => $midn));

foo.php中,要获取值:

$name = $_GET['name'];
$midn = $_GET['midn'];

再次,将它们输出到HTML:

<p><?php echo htmlspecialchars($name, ENT_COMPAT, 'UTF-8'); ?></p>

这基本上就是你需要做的。始终使用正确的介质函数转义值,不要超出或早于您需要的转义。