За последние 24 часа нас посетили 52978 программистов и 1771 робот. Сейчас ищут 832 программиста ...

Арабский шрифт меняет направление конкетинации

Тема в разделе "PHP для новичков", создана пользователем sgtpepper2000, 28 июн 2016.

  1. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    Добрый день.

    Дана такая строка:
    Код (Text):
    1. $keyword='تحميل فيلم اوشن 14';
    Далее производится конкетинация:
    Код (Text):
    1. $str='("'.$keyword.'", 1, 2),';
    2. die($str);
    Из-за арабских символов и отсутствия латинских (слева-направо-го набора) строка переворачивается и получается резалт:
    ("تحميل فيلم اوشن 14", 1, 2),

    Т.е. строка выглядит перевернутой. В моем случае запарывается sql-запрос. Что можно сделать?
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    По-человечески передавать параметры в запрос.
    insert into set
     
  3. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    В моем случае формируется множественный INSERT запрос:
    Код (Text):
    1. $query='INSERT INTO campaign_keywords (`Name`, `CampaignId`, `Order`) VALUES ';
    2. foreach($keywords_arr as $keyword){
    3.     $i++;
    4.     $query.='("'.trim($keyword).'", '.$campaign_id.', '.$i.'),';
    5. }
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Какая разница, речь о принципе построения запроса.

    $keyword= "\u202B" . 'تحميل فيلم اوشن 14' . "\u202C" ;

    Вас спасёт, но код от этого правильнее не станет.
     
  5. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    Zuldek, что конкретно имеете ввиду по коду?
    В первом посте я показал тестовую строчку, на которой видна проблема. Запрос формируется в цикле, но несколько по-другому.

    Ваше предложение дает следующее:
    Код (Text):
    1. $keyword= "\u202B" . 'تحميل فيلم اوشن 14' . "\u202C";
    2. $str='("'.$keyword.'", 1, 2),';
    3. die($str);
    ("\u202Bتحميل فيلم اوشن 14\u202C", 1, 2),
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    экранирование или подготовленные запросы не используются?
     
  7. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    Не используются
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @sgtpepper2000 попробуй подготовленные запросы
     
  9. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
     
  10. sgtpepper2000

    sgtpepper2000 Активный пользователь

    С нами с:
    3 дек 2014
    Сообщения:
    71
    Симпатии:
    2
    На что намекаете?)
     
  11. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    PHP:
    1. protected $tableName;
    2.     protected $Insert = 'INSERT INTO ';
    3.  
    4.  
    5.     //Функция выбора Таблицы из БД.
    6.     public function table($tableName)
    7.     {
    8.         $this->tableName = $tableName;
    9.         return $this;
    10.     }
    11.  
    12.     //Функция экранирующая данные при добавлении
    13.     public function prepareDataBase ($arr) {
    14.         $db = Db::getConnection();
    15.  
    16.         $stringIns = [];
    17.  
    18.         foreach ($arr as $key => $value) {
    19.             $stringIns[] = sprintf('%s=%s', $key, $db->quote($value));
    20.  
    21.         };
    22.  
    23.  
    24.         return $stringIns = implode(', ', $stringIns);
    25.  
    26.     }
    27.  
    28.     //Функция добавления данных в таблицу БД
    29.     public function Insert($arr) {
    30.  
    31.         $db = Db::getConnection();
    32.  
    33.         $stringIns = $this->prepareDataBase($arr);
    34.  
    35.         $result = $db->query($this->Insert . $this->tableName . ' SET ' . $stringIns);
    36.  
    37.  
    38.     }
    --- Добавлено ---
    Не чё просто сам не давно решал, вопрос по добавлении данных, в бд. Вот как у меня это сделано.