2014-01-04 5 views
1

Итак, я создаю сайт PHP, который вставляет переменные POST в базу данных MySQL. Весь сайт закодирован в UTF8 для поддержки текста на иврите.Проблемы с кодировкой MySQL на iOS

Он отлично работает на рабочем столе, но в iOS сайт по какой-то причине вставляет переменные в тарабарщину.

это образец PHP код:

$con=mysqli_connect("xxx","xxx","xxx","xxx"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$fullPhone=$_POST[prefix].''.$_POST[phone]; 
$sql="INSERT INTO testtab (fbName, fbId, fbComment, name, email, phone) 
VALUES('$_POST[fbName]','$_POST[fbID]','$_POST[fbComment]','$_POST[name]','$_POST[email]','$fullPhone')"; 

if (!mysqli_query($con,$sql)) 
{ 
    die('Error: ' . mysqli_error($con)); 
} 

mysqli_close($con); 
+0

Это может помочь привести пример или два из того, как именно данные повреждены. Кроме того, «сайт вставляет переменные в тарабарщину», но где вы видите эту тарабарщину? В приложении iOS? Как отображаются данные в iOS? –

+0

Я вижу тарабарщину, когда печатаю таблицу в файле PHP. Вся информация на иврите, поступающая с ПК, отображается правильно, но информация, которая поступает из ios, отображается как символы. – user3160630

+1

Кстати, никогда не создавайте SQL, используя эти значения $ _POST': либо вызывайте 'mysqli_real_escape_string', либо привязывайте значения к'? 'Заполнителям. – Rob

ответ

0

Добавьте это в связи:

//if i want to work with hebrew databases 
mysql_query("SET NAMES 'utf8'",$connection);//reading hebrew from phpadmin database - only for hebrew sites 

Как это:

$con=mysqli_connect("xxx","xxx","xxx","xxx"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

//if i want to work with hebrew databases 
mysql_query("SET NAMES 'utf8'",$con);//reading hebrew from phpadmin database - only for hebrew sites 

$fullPhone=$_POST[prefix].''.$_POST[phone]; 
$sql="INSERT INTO testtab (fbName, fbId, fbComment, name, email, phone) 
VALUES('$_POST[fbName]','$_POST[fbID]','$_POST[fbComment]','$_POST[name]','$_POST[email]','$fullPhone')"; 

if (!mysqli_query($con,$sql)) 
{ 
    die('Error: ' . mysqli_error($con)); 
} 

mysqli_close($con); 
+0

Я использовал $ con запрос ("SET NAMES 'utf8'"); и он исправил проблему. большое спасибо!! – user3160630

0

У меня была аналогичная проблема как раз вчера с умными цитатами и другие символы Юникода. Решение для меня состояло в том, чтобы установить соединение MySQL с UTF-8, а также таблицы и HTML. Вот пример:

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to the database'); 

if (!mysql_set_charset('utf8', $conn)) { 
    echo "Error: Unable to set the character set.\n"; 
    exit; 
} 
0

Я собираю от одного из других ваших комментариев, что вы делаете SET NAMES к установите набор символов:

$con->query("SET NAMES 'utf8'"); 

Очевидно, что вы захотите использовать либо mysqli_real_escape_string, либо вручную привязать значения к заполнителям ? в своем SQL, чтобы защитить себя от SQL injection attacks, а также более невинное использование апострофа в ваших полях.

Но, если вы выполняете mysqli_real_escape_string ваших параметров, вы можете, следовательно, необходимо использовать mysqli_set_charset вместо SET NAMES SQL, выше:

$con->set_charset('utf8'); 

Если, с другой стороны, вы решаете проблему инъекции SQL используя ? заполнители в вашем SQL, а затем используйте mysqli_stmt_bind_param, чтобы привязать значения к этим заполнителям, тогда я не считаю, что имеет значение, если вы используете mysqli_set_charset или синтаксис SQL SET NAMES.

См. Обсуждение Character Sets Concepts заметок о поведении от SET NAMES и mysqli_set_charset.

+0

много полезной информации для меня, чтобы знать. Большое спасибо! – user3160630

Смежные вопросы