PHP.mk документација

Карактери сет

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

mysqlinfo.concepts.charset.php PHP.net прокси Преводот е вчитан
Оригинал на PHP.net
Патека mysqlinfo.concepts.charset.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + преведен приказ Кодовите, табелите и белешките остануваат читливи во истиот тек.
Карактери сет

Референца за `mysqlinfo.concepts.charset.php` со подобрена типографија и навигација.

mysqlinfo.concepts.charset.php

Карактери сет

Идеално, соодветен сет на знаци треба да биде поставен на ниво на сервер, а ова е опишано во делот » Конфигурација на сет на знаци од прирачникот на MySQL Server. Алтернативно, секој MySQL API нуди метод за поставување на сетот на знаци во време на извршување.

Безбедност: стандардниот сет на знаци

Сетот на знаци и избегнувањето на знаци

Сетот на знаци треба да биде разбран и дефиниран, бидејќи влијае на секоја акција и вклучува безбедносни импликации. На пример, механизмот за избегнување (на пр., mysqli_real_escape_string() за mysqli и Опис за PDO_MySQL) ќе се придржуваат до оваа поставка. Важно е да се сфати дека овие функции нема да го користат сетот на знаци што е дефиниран со прашање, така што, на пример, следново нема да има ефект врз нив:

Пример #1 Проблеми со поставување на сетот на знаци со SQL

<?php

$mysqli
= new mysqli("localhost", "my_user", "my_password", "world");

// Will NOT affect $mysqli->real_escape_string();
$mysqli->query("SET NAMES utf8mb4");

// Will NOT affect $mysqli->real_escape_string();
$mysqli->query("SET CHARACTER SET utf8mb4");

// But, this will affect $mysqli->real_escape_string();
$mysqli->set_charset('utf8mb4');

// But, this will NOT affect it (UTF-8 vs utf8mb4) -- don't use dashes here
$mysqli->set_charset('UTF-8');
?>

Подолу се прикажани примери кои демонстрираат како правилно да се промени сетот на знаци во време на извршување користејќи секој API.

Забелешка: Можна забуна со UTF-8
Бидејќи имињата на сетовите на знаци во MySQL не содржат цртички, низата "utf8" е валидна во MySQL за поставување на сетот на знаци на UTF-8 (до 3 бајти UTF-8 Unicode кодирање). Низата "UTF-8" не е валидна, бидејќи користењето на "UTF-8" нема да успее да го промени сетот на знаци и ќе фрли грешка.

Пример #2 Пример за поставување на сет на знаци: mysqli

<?php
$mysqli
= new mysqli("localhost", "my_user", "my_password", "world");

echo
'Initial character set: ' . $mysqli->character_set_name() . "\n";

if (!
$mysqli->set_charset('utf8mb4')) {
printf("Error loading character set utf8mb4: %s\n", $mysqli->error);
exit;
}

echo
'Your current character set is: ' . $mysqli->character_set_name() . "\n";
?>

Пример #3 Пример за поставување на сет на знаци: pdo_mysql

<?php
$pdo
= new PDO("mysql:host=localhost;dbname=world;charset=utf8mb4", 'my_user', 'my_pass');
?>

Белешки од корисници 1 белешка

mkroese на eljakim dot nl
пред 8 години
Please note that MySQL's utf8 encoding has a maximum of 3 bytes and is unable to encode *all* unicode characters.

If you need to encode characters beyond the BMP (Basic Multilingual Plane), like emoji or other special characters, you will need to use a different encoding like utf8mb4 or any other encoding supporting the higher planes. Mysql will discard any characters encoded in 4 bytes (or more).

See https://dev.mysql.com/doc/refman/5.7/en/charset-unicode-utf8mb4.html for more information on the matter
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.