2015-12-28 2 views
-1

У меня есть этот кодВставка PHP древнееврейский вар в MySQL

$myname="דוגמא"; 
$sql="insert into tbl_users values (" . $myname . ")"; 
$command = $con->prepare($sql); 
$command->execute() 

теперь, если я пишу $myname как этот

$myname="\'דוגמא\'"; 

это хорошо работает в противном случае результаты в БД выглядит ??? или тарабарщина.

db и стол и столбцы, все настроенные на «иврит».

Теперь мой вопрос: как я могу сделать это обычным способом не так, как с помощью слэшей?

+0

сделал вы добавили параметры сортировки 'utf8_unicode_ci'? –

+0

да, я попробовал 'utf8_unicode_ci' еще не очень хорошо –

ответ

0

хранения данных:

  • Укажите utf8mb4 набор символов на всех таблиц и текстовых столбцов в базе данных. Это делает MySQL физически хранить и извлекать значения, закодированные изначально в UTF-8. Обратите внимание, что MySQL неявно использует кодировку utf8mb4, если задано сопоставление utf8mb4_* (без какого-либо явного набора символов).

  • В более старых версиях MySQL (< 5.5.3) вам, к сожалению, придется просто использовать utf8, который поддерживает только подмножество символов Юникода. Хотел бы я шутить.

Доступ к данным:

  • В коде приложения (например, PHP), в любой БД метод доступа используется, вам необходимо установить кодировку подключения к utf8mb4.Таким образом, MySQL не выполняет преобразование из собственного UTF-8, когда он передает данные в ваше приложение и наоборот.

  • Некоторые драйверы предоставляют свой собственный механизм для настройки набора символов соединения, который обновляет собственное внутреннее состояние и информирует MySQL о кодировании, которое будет использоваться в соединении —. Это обычно предпочтительный подход. В PHP:

    • Если вы используете PDO слой абстракции с PHP ≥ 5.3.6, вы можете указать charset в DSN:

      $dbh = new PDO('mysql:charset=utf8mb4'); 
      
    • Если вы используете mysqli, вам можно назвать set_charset():

      $mysqli->set_charset('utf8mb4');  // object oriented style 
      mysqli_set_charset($link, 'utf8mb4'); // procedural style 
      
    • Если вы застряли простой mysql, но, похоже, работает PHP ≥ 5.2.3, вы можете позвонить по номеру mysql_set_charset.

  • Если драйвер не предоставляет свой собственный механизм для установки набора символов соединения, возможно, придется выдать запрос, чтобы сказать MySQL, как ваше приложение ожидает данные о связи должны быть закодированы: SET NAMES 'utf8mb4'.

  • Такое же соображение относительно utf8mb4/utf8 применяется, как указано выше.

Выход:

  • Если приложение передает текст на другие системы, они также должны быть проинформированы о кодировке символов. В веб-приложениях браузер должен быть проинформирован о кодировке, в которой отправляются данные (через заголовки ответов HTTP или HTML metadata).

  • В PHP вы можете использовать опцию php.ini default_charset или вручную выпустить заголовок MIME Content-Type, что является просто более полезным, но имеет тот же эффект.

Входной:

  • К сожалению, вы должны проверить каждую полученную строку как действительный UTF-8, прежде чем пытаться хранить или использовать его в любом месте. PHP mb_check_encoding() делает трюк, но вы должны использовать его религиозно. На самом деле этого не происходит, так как вредоносные клиенты могут отправлять данные в любую кодировку, которую они хотят, и я не нашел трюка, чтобы заставить PHP сделать это для вас надежно.

  • Из моего чтения текущего HTML spec следующие субпалеты не нужны или даже не действительны для современного HTML. Я понимаю, что браузеры будут работать и отправлять данные в набор символов, указанный для документа. Однако, если вы ориентируетесь на более старые версии HTML (XHTML, HTML4 и т. Д.)), Эти точки все еще может быть полезным:

    • Для HTML, прежде чем HTML5 только: вы хотите, чтобы все данные, отправленные вам браузеры, чтобы быть в кодировке UTF-8. К сожалению, если вы идете по единственному способу надежно сделать это, добавьте атрибут accept-charset ко всем вашим <form> тегам: <form ... accept-charset="UTF-8">.
    • Для HTML до HTML5 только: обратите внимание, что спецификация HTML W3C говорит, что клиенты должны «по умолчанию» отправлять формы обратно на сервер в любой кодировке, обслуживаемой сервером, но это, по-видимому, только рекомендация, следовательно, необходимо будучи явным на каждом ярлыке <form>.

Другие соображения Код:

  • достаточно Очевидно, что все файлы, которые вы будете служить (PHP, HTML, JavaScript, и т.д.) должны быть закодированы в уважительной UTF-8 ,

  • Вы должны убедиться, что каждый раз, когда вы обрабатываете строку UTF-8, вы делаете это безопасно. Это, к сожалению, тяжелая часть. Вероятно, вы захотите широко использовать расширение PHP mbstring.

  • Встроенные строковые операции PHP: не по умолчанию UTF-8 безопасен. Есть некоторые вещи, которые можно смело выполнять с обычными строковыми операциями PHP (например, конкатенация), но для большинства вещей вы должны использовать эквивалентную функцию mbstring.

  • Чтобы узнать, что вы делаете (читайте: не испортите его), вам действительно нужно знать UTF-8 и как он работает на минимально возможном уровне. Ознакомьтесь с любыми ссылками из utf8.com на некоторые полезные ресурсы, чтобы узнать все, что вам нужно знать.

Source

See This also

+1

благодаря этому исправлению проблемы я изменяю сортировку на 'utf8mb4_bin' и в построении PDO write charset =' utf8mb4'. –

1

Вы пытаетесь вставить строку. В SQL-строках необходимо окружать кавычками: INSERT INTO tbl_name (field_name) VALUES ("string surrounded by quotation marks");.

Пожалуйста, подумайте об использовании подходящего уровня абстракции базы данных, такого как PDO, или даже лучшего полнофункционального решения, такого как Doctrine.

+0

все еще не работает, это выглядит как' ××? ×? ×? ×? '. –

+0

Итак, пожалуйста, предоставьте дополнительную информацию. Какая у вас настройка? Как выглядит оператор create table? Дать больше коды и, к примеру, как вы установить соединение с базой данных и т.д. –

+0

'CREATE TABLE tbl_users ( имени пользователя VARCHAR (100) СОРТОМ hebrew_bin NOT NULL ) ENGINE = MyISAM DEFAULT CHARSET = древнееврейские КОПИИ = hebrew_bin' –

-1

Пожалуйста, попробуйте следующий код:

/* change character set to utf8 */ 
if (!mysqli_set_charset($mysqli, "utf8")) 
{ 
    printf("Error loading character set utf8: %s\n", mysqli_error($mysqli)); 
    exit(); 
} 
else 
{ 
    //printf("Current character set: %s\n", mysqli_character_set_name($mysqli)); 
} 
+0

Пожалуйста не используйте устаревшее расширение mysqli и его функции. Используйте вместо этого правильный слой абстракции, например PDO. –

+0

никаких ошибок и все еще не очень хорошо. –

0

Использование UTF-8 при CREATE таблицы.

create table table_name() CHARACTER SET = utf8; 

Использование UTF-8 при ВСТАВИТЬ таблице

set username utf8; INSERT INTO table_name (ABC,VAL); 

Вы можете подробно прочитать из here

Также проверьте соединение, оно должно быть в utf-8.

Например:

$link = mysql_connect('localhost', 'username', 'password'); 
mysql_set_charset('utf8',$link); 
+0

Я уже пробовал это и до сих пор не работает, но спасибо –

+0

Я обновляю свой ответ. Как насчет вашей связи? –

+0

нашел решение, но спасибо. –

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