Проблемы с отображением текста в Javascript "N�O�T�I�C�E�", php отображает его без проблем

PHP создает текст из метаданных из файла изображения, который сохраняет его в одноименной переменной источника IMG. Нет проблем

JavaScript отображает галерею для показа изображений, прокрутки и увеличения.
При увеличении дает описание изображения из исходного атрибута, но всегда отображает текст с � после каждого символа. Но PHP нет.

Я пробовал кодировку, которую вы увидите в коде & & echo header("Content-Type: text/html; charset=ISO-8859-1");

PHP:

    $path = "gallery/";
    $objs = new RecursiveIteratorIterator(new 
    RecursiveDirectoryIterator($path), 
    RecursiveIteratorIterator::SELF_FIRST);
    $num = 0;
    foreach ($objs as $pic){
        $pic = str_replace('gallery/', '', $pic);
        if ($pic == '..' or $pic == '.'){
            continue;
        }
        $exif = exif_read_data("$DIR/gallery/$pic", 0, true);
        $pic = str_replace('.JPG', '', $pic);
        ${$pic} = $exif['IFD0']['Comments']; ///// php Variable
        echo "<script> var $pic = '".$exif['IFD0']['Comments']."'; 
              var $pic = utf8_encode($pic);</script>"; 
        // JS of variable of same name.
    }
Sloppy but Works

JQuery:
    $('#mSide').on('click',function(){
        var src = $('#mPic').attr('src');
        var v = src.replace('/gallery/','');
        v = v.replace('.JPG','');
        v =  unescape(encodeURIComponent(v));
        $('#fullPic').show();
        $('#fullPic').append('<img class=\"fPic\" src=\"'+src+'\" 
    height=\"90%\" widdth=\"90%\" style=\"margin-left:0px;\" />');
        $('#fullPic').append('<span id=\"picSummary\" 
    style=\"color:#FFFFFF;\" >testing <textarea > '+  window[v] +'</textarea> 
    </span>');
        $('#fullPic').prepend('<input class=\"closeFullP headr\" 
   value=\"Close\" READONLY><br class=\"closeFullP\">');
   }); 

Небрежно, но работает, и window[v] — это вызов

Должно отображаться: это новое значение = УВЕДОМЛЕНИЕ. Это сообщение электронной почты может содержать юридически защищенную и/или конфиденциальную информацию. Если вы не являетесь предполагаемым получателем, настоящим уведомляем вас о том, что любое распространение содержания этого сообщения строго запрещено. Если вы получили это сообщение по ошибке, немедленно сообщите об этом отправителю по номеру ########### и удалите все копии этого сообщения электронной почты и его вложений.

Не: N�O�T�I�C�E�:� �T�h�i�s� �e�-�m�a�i�l� �м�е�с�с�а�г�е� �м�а�й� �к�о�н�т�а�ин� �л�е�г�а�л�л�й� �п�р�и�в�и�л�е�г�э�д� �а�н�д�/�о�р� �к�о�н�ф�и�д�е�н�т�и�а�л� �и�н�ф�о�р�м�а�т�и�о�н� �I�f� �y�o�u� �a�r�e� �n�o�t� �t�h�e� �и�н�т�н�д�э�д� �р�е�ц�и�п�и�и�н�,............. ..

Сам файл JS/главная страница скорее всего сохранены в кодировке UTF-8..? Убедитесь, что кодировка файлов и заголовков совпадают.

Teemu 01.02.2019 21:38

спасибо за быстрый ответ Teemu. Все это запускается из одного и того же Index.php, у меня есть другие php-страницы и каталог, в который я помещаю файлы img, но не файлы js... все запускается из src='w3schools.com/lib/w3.js'

KevyTeky 01.02.2019 22:16

Указывает ли какое-либо из полей EXIF ​​кодировку? Похоже, это может быть UTF-16, и вам нужно преобразовать кодировку вашей страницы.

Joni 01.02.2019 22:27

Спасибо, Джони, только что попробовал это предложение, но теперь полагаю, что это чистая проблема JS, поскольку у PHP нет проблем с отображением ... но у JS есть. Я нашел эту страницу SO из вашего комментария, но у них такая же проблема, но с PHP. страница: stackoverflow.com/questions/18826489/…

KevyTeky 01.02.2019 22:45

Это не UTF-8, это UTF-16LE.

Sammitch 01.02.2019 23:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Никогда используют utf8_encode() или utf8_decode(), они делают ужасные предположения и счастливо/тихо портят ваши данные. Всегда используйте функцию, которая позволяет вам явно указывать ваши входные и выходные кодировки.

Данные, которые вы извлекаете из EXIF, закодированы как UTF16-LE, а ваша страница... что-то другое. Я не могу сказать, что, и вы, вероятно, должны понять это и быть последовательным.

Предлагаемое чтение: UTF-8 полностью

Если ваша страница закодирована как ISO-8859-1:

$proper = mb_convert_encoding($input, 'ISO-8859-1', 'UTF-16-LE');

Если ваша страница закодирована как UTF-8:

$proper = mb_convert_encoding($input, 'UTF-8', 'UTF-16-LE');

Ссылка: https://secure.php.net/manual/en/function.mb-convert-encoding.php

Спасибо, Саммитч углубится в это и посмотрит, что сработает.

KevyTeky 02.02.2019 00:22

Эта preg_replace устранила проблему: $store = preg_replace('/[\x00-\x1F\x7F-\xFF]/', '', $exif['IFD0']['Comments']);

KevyTeky 05.02.2019 00:16

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

Sammitch 05.02.2019 00:30

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

KevyTeky 05.02.2019 17:44

Другие вопросы по теме