Nano Hash - криптовалюты, майнинг, программирование

Невозможно заменить этот юникод (�) на (пробел) при загрузке CSV в PHP

У меня есть данные Excel, преобразованные из XLSX в CSV, затем мне нужно загрузить их на свой сайт. Данные, показанные в CSV, изменились после загрузки.

// On Excel (CSV)
Row   Description
 1    Enjoy this life without drugs
 2    Life is so short, so enjoy it

После загрузки на сайт и вставки в MySQL это выглядит так.

// On MySQL
Row   Description
 1    Enjoy?this life without?drugs
 2    Life is?so?short, so?enjoy it

// On PHP ( (echo loop).
Row   Description
 1    Enjoy�this life without�drugs
 2    Life is�so�simple, so�enjoy it

Я проверил свой CSV, это просто пробел, который изменился на ? и . Итак, я пытаюсь заменить это, но все не удалось использовать:

// $the_string = Line of text Description.
1. str_replace("�", " ", $the_string);
2. str_replace("&#65533", " ", $the_string);
3. str_replace("&#xfffd", " ", $the_string);
4. str_replace("?", " ", $the_string");

Но, если я тестирую его только на <?php str_replace("�", " ", "a�b"); ?>, он работает.

Я не знаю, где ошибка.

Это мой исходный код:

public function upload()
{
   $config = array(
      "upload_path" => "./uploads/",
      "allowed_types" => "csv"
   );
   $this->load->library("upload", $config);
   $this->load->helper("file");
   $this->upload->initialize($config);
   $upload = $this->upload->data();
   $file = base_url()."uploads/{$upload['file_name']}";
   $file_handle = fopen($file, "r");
   $check_line = 0;
   while ( ! feof($file_handle))
   {
      $line_of_text = fgetcsv($file_handle, 1024);
      $check_line++;
   }
   fclose($file_handle);
   if ($check_line > 1)
   {
      $file_handle2 = fopen($file, "r");
      while ( ! feof($file_handle2))
      {
         $line_of_text = fgetcsv($file_handle, 1024);
         $description = $line_of_text[1];
         $this->model->insert_description($description);
      }
      fclose($file_handle);
   }
}

  • Думаю проблема с кодировкой. Тот же вопрос здесь 26.01.2018
  • Решено, проверьте ответ ниже. 26.01.2018

Ответы:


1

Попробуйте использовать preg_replace():

preg_replace('/\x{FFFD}/u', ' ', $the_string);

Попробуйте здесь.

Внимание: это удалит символ из строки, но ТОЛЬКО в том случае, если это реальный символ, сохраненный в строке.

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

Чтобы удалить все непечатаемые символы, используйте это:

preg_replace('/[\x00-\x1F\x7F-\xFF]/', '', $the_string);

Попробуйте здесь.

26.01.2018
  • Привет, я пробовал твой код. Данные исчезли, на эхе отображается только 1 пробел. Я думаю, что это то же самое, что и str_replace, только работает с проверкой <?php ?> 26.01.2018
  • Вы должны использовать переменную $the_string вместо $str в моем примере. Я отредактировал свой ответ в соответствии с именем вашей переменной. 26.01.2018
  • Конечно, я пробовал это. 26.01.2018
  • Пробовали ли вы сейчас с моим последним редактированием (с $the_string)? 26.01.2018
  • Меня пытались использовать $the_string и $line_of_text[1]. Данные исчезли, просто покажите " " (1 пробел). Я до сих пор не знаю, почему. 26.01.2018
  • Это тот же случай, что и: если я тестирую его только на <?php str_replace("�", " ", "a�b"); ?>, он работает и печатает a b. 26.01.2018
  • Успех ! Большое спасибо ! 26.01.2018
  • Давайте продолжим обсуждение в чате. 26.01.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..