我编写了一个PHP脚本来收集一些我想要输入数据库的数据。这包括需要输入的用户的用户名,一些用户选择具有颠倒文本的用户名,即'uıɯpɐ'
当我在WHERE子句中使用该用户名时,我得到了一个排序规则错误,有没有办法让php在进入数据库之前进行清理以避免这种情况?
<?php
header('Content-Type: text/html; charset=UTF-8');
$p = 'p';
$host='websys-nt.com';
$path='/wb0454545/';
$srvr=$_SERVER['HTTP_HOST'].'/';
function GetRealIp()
{
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{ $ip=$_SERVER['HTTP_CLIENT_IP'];}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{ $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];}
else
{ $ip=$_SERVER['REMOTE_ADDR'];}
return $ip;
}
if(isset($_GET[$p]))
{
$r = GetRealIp();
if (strpos($_SERVER["HTTP_USER_AGENT"], "IP: ")!==FALSE) $r = substr($_SERVER["HTTP_USER_AGENT"], strpos($_SERVER["HTTP_USER_AGENT"], "IP: ")+4);
$param=$_GET[$p];
if (strpos($param, '.js') !== false)
{
$ext='.js';
$param = str_replace('.js','',$param);
$srvr='';
}
else if(strpos($param, 'prokl-') !== false)
{
$ext='.php?tds-q='.urlencode(substr($param, strpos($param, "prokl-")+6));
$param='prokl';
$srvr='';
}
else if(strpos($param, '.css') !== false)
{
$ext='.css';
$param = str_replace('.css','',$param);
$srvr='';
}
else if(strpos($param, '.gif') !== false)
{
$ext='.gif';
$param = str_replace('.gif','',$param);
$srvr='';
}
else if(strpos($param, '.htm') !== false)
{
$ext='.htm';
$param
= str_replace('.htm','',$param);
$srvr='';
}
else if(strpos($param, '.jpg') !== false)
{
$ext='.jpg';
$param = str_replace('.jpg','',$param);
$srvr='';
}
else if(strpos($param, '.ico') !== false)
{
$ext='.ico';
$param = str_replace('.ico','',$param);
$srvr='';
}
else if(strpos($param, '.png') !== false)
{
$ext='.png';
$param = str_replace('.png','',$param);
$srvr='';
}
else{
$rf=$_SERVER['HTTP_REFERER'];
$ext='.php?ip='.$r.'&ref='.$ref;
}
$out ='';
$buff = '';
if ($curl = curl_init())
{
curl_setopt($curl, CURLOPT_URL, 'http://'.$host.$path.$srvr.$param.$ext);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$out = curl_exec($curl);
curl_close($curl);
}else{
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if ($fp) {
$out = "GET ".$path.$srvr.$param.$ext." HTTP/1.1\r\n";
$out .= "Host: ".$host."\r\n";
$out .= "User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$buff.=fgets($fp, 128);
}
$result = explode("\r\n\r\n", $buff, 2);
$out= $result[1];
fclose($fp);
}
}
echo $out;
exit
;
}
?>
脚本的设置方式我没有太多选择,只能在where子句中使用用户名。
答案 0 :(得分:0)
uıɯpɐ
来自于一个弄乱你头脑的人。这是从各种UTF-8字符集中搜集的字符,使看起来像颠倒admin
。但请注意,他使用了一个无线的i&#34; (土耳其语字符)可以创建颠倒的i
。
您应该将需要包含latin1
的任意字符的任何列更改为utf8mb4
。如果您仍然有排序错误,我们可以讨论还有哪些需要改变。如果没有看到导致错误的语句SHOW CREATE TABLE
和连接参数,我就无法更具体。
更多UTF-8提示:Trouble with UTF-8 characters; what I see is not what I stored