我有一个奇怪的问题困扰我一段时间了,我无法解决它。 出于测试目的,我创建一个带有参数的URL,该参数用于从数据库中获取结果。它大部分时间都可以正常工作,但它似乎很难与特殊字符一起使用,比如“ß”。
以下是用户urlencoded的示例网址:
https://www.testurl.com/login.php?user=bu%DFmann(bu%DFmann =bußmann)
这是我的php脚本的一部分:
$user = new User;
$loginOrEmail = $this->_helper->get_request_value("user", array("get"));
if ($user->check_user_is_valid($loginOrEmail)) {
.........
这是check_user_is_valid
方法:
$sql = "SELECT * FROM user WHERE (email='" . mysql_real_escape_string($loginOrEmail) . "' OR login='" . mysql_real_escape_string($loginOrEmail) . "') AND activated = 'yes'";
$result = $database->query($sql);
if (mysql_num_rows($result) < 1) {
return false;
}
return true;
现在这似乎为上面的url返回false。如果我打印查询(使用print_r或var_dump),查询看起来很好:
SELECT * FROM user WHERE (email='bußmann' OR login='bußmann') AND activated = 'yes'
事实上。如果我将此查询复制并粘贴到phpMyAdmin并执行它,它会产生我期待的行。 这里发生了什么?问题出在哪儿?我很确定它与错误的编码或其他东西有关,因为它适用于所有其他名称。
我连接到数据库后已经有mysql_set_charset('utf-8', $connection);
。
请注意:我知道这既不安全也不是最佳方式。它仅用于测试目的。
答案 0 :(得分:1)
为了关闭问题并将其标记为已解决,并按照OP's request
包含多个注释来排查/查明问题,就是将文件的编码“保存”为UTF-8而不是目前使用“iso-8859-1”
答案 1 :(得分:0)
尝试在数据库连接后放置mysql_set_charset
$link = mysql_connect('localhost', 'user', 'password');
mysql_set_charset('utf8',$link);