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� �и�н�т�н�д�э�д� �р�е�ц�и�п�и�и�н�,............. ..
спасибо за быстрый ответ Teemu. Все это запускается из одного и того же Index.php, у меня есть другие php-страницы и каталог, в который я помещаю файлы img, но не файлы js... все запускается из src='w3schools.com/lib/w3.js'
Указывает ли какое-либо из полей EXIF кодировку? Похоже, это может быть UTF-16, и вам нужно преобразовать кодировку вашей страницы.
Спасибо, Джони, только что попробовал это предложение, но теперь полагаю, что это чистая проблема JS, поскольку у PHP нет проблем с отображением ... но у JS есть. Я нашел эту страницу SO из вашего комментария, но у них такая же проблема, но с PHP. страница: stackoverflow.com/questions/18826489/…
Это не UTF-8, это UTF-16LE.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Никогда используют 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
Спасибо, Саммитч углубится в это и посмотрит, что сработает.
Эта preg_replace устранила проблему: $store = preg_replace('/[\x00-\x1F\x7F-\xFF]/', '', $exif['IFD0']['Comments']);
@user2612821 user2612821 хорошо, но это испортит любые данные, которые содержат что-либо, кроме английского алфавита и общей пунктуации. Это уродливый кладж, о котором вы в конечном итоге пожалеете.
Вы имеете в виду, что я должен преобразовать его в любом случае? Я замечу, что этой проблемы не было в PHP, который сделал переменную только в JS, которая была копией этой переменной. Спасибо Саммитч.
Сам файл JS/главная страница скорее всего сохранены в кодировке UTF-8..? Убедитесь, что кодировка файлов и заголовков совпадают.