Utf-8发送到PHP页面-值不符合预期


utf-8 post to php page - values not as expected

甚至不太确定如何问这个,因为我不明白到底发生了什么。这是一个许可证生成器脚本,这是张贴到我的php页面。这些值以utf-8格式发送给我,并且它们允许在name字段中使用奇怪的字符。

发送给我的名字- Вагиф Сәмәдоғлу

所发布的url中的值- &name=%D0%92%D0% b0 % b0 % b0 % b8 %D1%84+%D0% a1 %D3%99%D0%BC%D3%99%D0%B4%D0%BE%D2%93%D0%BB%D1%83

现在在我这边,我在名字上运行一些代码:

//strip name of everything but chars and digits
$cust_name = preg_replace('/[^'w]/', '', $_POST['name']);
//use first 10 characters (if there is)
$cust_name = strtolower( substr( $cust_name, 0, 10) );      
//pad random characters to username until it is unique in the database
do {
    //random 30 character string            
    $random = substr(md5(microtime().rand(1,100000)),0,30);
    //pad username with random string to ensure it is 20 chars long
    $account_username = str_pad($cust_name, 20 , $random);
} while ( !usernameAvail($db, $account_username) );

问题是$account_username的结果是e2201b0ef6eb463213f6

现在,如果张贴的名字是一个'正常'的名字,如'Joe Schmoe',那么根本没有问题:

Name sent to me - Joe Schmoe

它在张贴url中的值- &name=Joe+Schmoe

$account_username is joeschmoe6eb463213f6

我建议您使用urldecode而不是所有这些东西。在任何情况下,如果西里尔字母不适合(甚至法语或西班牙语),您将无法在数据库中存储西里尔字母。您可以首先检查编码并使用类似iconv:

的内容
iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text)