[英]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语句中使用它时,它实际上可以工作 。
我想是因为我正在做echo
和die();
而不指定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
您可以在此处选择: urldecode
或rawurldecode
。
如果您使用urlencode
编码了字符串,则必须使用urldecode
因为要处理空格。 尽管urlencode
将空格转换为+
,但与rawurlencode
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.