繁体   English   中英

将URLENCODED数据转换为PHP中的UTF-8

[英]Translate URLENCODED data into UTF-8 in PHP

我的数据库中有一个字符串,例如中华武魂当我发布请求通过网站检索数据时,我将数据以%E4%B8%AD%E5%8D%8E%E6%AD%A6%E9%AD%82的格式发送到服务器%E4%B8%AD%E5%8D%8E%E6%AD%A6%E9%AD%82

为了将其恢复为可用形式,我必须采取什么解码步骤? 同时还清理用户输入以确保他们不会尝试SQL注入攻击吗? (编码之前或之后的转义字符串?)

编辑:

 rawurldecode();  // returns "ä¸­åŽæ­¦é­‚"
 urldecode();     // returns "ä¸­åŽæ­¦é­‚"


public function utf8_urldecode($str) { 
    $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str)); 
    return html_entity_decode($str,null,'UTF-8'); 
}
 // returns "ä¸­åŽæ­¦é­‚"

...当我尝试在SQL语句中使用它时,它实际上可以工作

我想是因为我正在做echodie(); 而不指定UTF-8的标头(因此我想这是拉丁文)

谢谢您的帮助!

当您的数据实际上是百分比编码形式时,只需调用rawurldecode

$data = '%E4%B8%AD%E5%8D%8E%E6%AD%A6%E9%AD%82';
$str = rawurldecode($data);

这已经足够,因为数据已经以UTF-8进行编码: (U + 4E2D)以UTF-8 的字节序列0xE4B8AD进行编码,并且在使用百分比编码时以%E4%B8%AD进行编码。

您的输出似乎不符合预期,可能是因为使用错误的字符编码解释了输出,可能是Windows-1252而不是UTF-8。 因为在Windows-1252中,0xE4表示ä ,0xB8表示¸ ,0xAD表示å ,依此类推。 因此,请确保正确指定输出字符编码

使用PHP的urldecode: http : //php.net/manual/en/function.urldecode.php

您可以在此处选择: urldecoderawurldecode

如果您使用urlencode编码了字符串,则必须使用urldecode因为要处理空格。 尽管urlencode将空格转换为+ ,但与rawurlencode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM