Кодировка символов UTF-8 борется против json_encode () [дубликат]

Я обнаружил, что шаблон интерфейса> Аннотация> Конкретный работает в следующем прецеденте:

1.  You have a general interface (eg IPet)
2.  You have a implementation that is less general (eg Mammal)
3.  You have many concrete members (eg Cat, Dog, Ape)

Абстрактный класс определяет общие атрибуты по умолчанию для конкретных классов, но обеспечивает интерфейс , Например:

public interface IPet{

    public boolean hasHair();

    public boolean walksUprights();

    public boolean hasNipples();
}

Теперь, поскольку у всех млекопитающих есть волосы и соски (AFAIK, я не зоолог), мы можем перевернуть это в абстрактный базовый класс

public abstract class Mammal() implements IPet{

     @override
     public walksUpright(){
         throw new NotSupportedException("Walks Upright not implemented");
     }

     @override
     public hasNipples(){return true}

     @override
     public hasHair(){return true}

И тогда конкретные классы просто определяют, что они идут вертикально.

public class Ape extends Mammal(){

    @override
    public walksUpright(return true)
}

public class Catextends Mammal(){

    @override
    public walksUpright(return false)
}

Этот дизайн хорош, когда есть много конкретных классов, и вы не хотите поддерживать шаблон, чтобы запрограммировать интерфейс. Если к интерфейсу были добавлены новые методы, это сломало бы все результирующие классы, поэтому вы все равно получите преимущества интерфейса.

В этом случае абстрактный может быть также конкретным; однако абстрактное обозначение помогает подчеркнуть, что эта модель используется.

29
задан Dave Jarvis 7 May 2010 в 16:19
поделиться

3 ответа

// Create an empty array for the encoded resultset
$rows = array();

// Loop over the db resultset and put encoded values into $rows
while($row = mysql_fetch_assoc($result)) {
  $rows[] = array_map('utf8_encode', $row);
}

// Output $rows
echo json_encode($rows);
38
ответ дан 28 November 2019 в 01:22
поделиться

В вашем соединении: mysql_set_charset('utf8', $link);

Пример:

<?php
$link = mysql_connect('localhost', 'your_user', 'your_password');
mysql_set_charset('utf8', $link);
$db_selected = mysql_select_db('your_db', $link);
...

Надеюсь, что несколько помогает.

1
ответ дан alditis 28 November 2019 в 01:22
поделиться
foreach( $row as $value ) {
  $value = utf8_encode( $value );

Фактически вы не записываете свое закодированное значение обратно в массив $ row , вы меняете только локальную переменную $ value . Если вы хотите написать ответ при изменении переменной, вам нужно будет рассматривать ее как ссылку:

foreach( $row as &$value ) {

Лично я бы попытался избегать ссылок, где это возможно, и для этого случая вместо этого используйте array_map , как указано пользователя Kemo.

Или mysql_set_charset в UTF-8, чтобы получить возвращаемые значения в UTF-8 независимо от фактических сопоставлений таблиц, в качестве первого шага к миграции приложения в UTF-8.

11
ответ дан 28 November 2019 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: