2014-02-19 3 views
2

나는 이상한 문제가있어서 지금 당장 나를 괴롭 히고 해결할 수 없다. 테스트 목적으로 데이터베이스에서 결과를 얻는 데 사용되는 매개 변수가있는 URL을 만듭니다. 그것은 대부분 잘 작동하지만 "ß"와 같은 특수 문자로 고생하는 것 같습니다. 여기 PHP/MYSQL 쿼리 결과가 잘못되었습니다. 인코딩이 잘못 되었습니까?

는 사용자가 urlencoded를하는 URL의 예입니다 :

https://www.testurl.com/login.php?user=bu%DFmann (BU % DFmann = 과전압, 전류, 온도)

그리고 이것은 내 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

mysql_set_charset ('utf-8', $)이 아닌 'mysql_set_charset ('utf8 ', $ connection) 연결);'하이픈을 제거하고 다시 시도하십시오. –

+0

오, 젠장. Mistyped :(그것은 이미 utf8입니다.하지만 뭔가 다른 것으로 나타났습니다. 내 브라우저 인코딩을 ISO-8859-1로 설정 한 경우에만 인쇄되는 SQL 쿼리가 UTF-8로 잘못 표시됩니다. – puelo

+0

또는, $ result = $ database-> query ($ sql); 앞에'$ user-> new user;'$ database-> query ('set name utf8'); –

답변

1

데이터베이스 연결 후 mysql_set_charset 퍼팅 시도하고 따라 OP's request 문제를/문제 해결을 파악하기 위해 여러 의견을 포함하여 파일의 인코딩을하는 것입니다 "iso-8859-1"대신에 "UTF-8"로 저장 됨

0

해결로

질문을 닫습니다 및 표시 위해
$link = mysql_connect('localhost', 'user', 'password'); 
mysql_set_charset('utf8',$link); 
+0

이미 있습니다. 언급하는 것을 잊어 버렸습니다. – puelo

관련 문제