У меня есть txt-файл, где, если я открываю стандартный текстовый редактор как блокнот или scite, я могу читать такие строки:
Artist1 – Title 1 Artist2 – Title 2
Затем я открываю его с помощью PHP-скрипта, и я читаю строки:
$tracklistFile_name=time().rand(1, 1000).".".pathinfo($_FILES['tracklistFile']['name'], PATHINFO_EXTENSION); if(((pathinfo($tracklistFile_name, PATHINFO_EXTENSION)=='txt')) && (move_uploaded_file($_FILES['tracklistFile']['tmp_name'], 'import/'.$tracklistFile_name))) { $fileArray=file('import/'.$tracklistFile_name, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $fileArray=array_values(array_filter($fileArray, "trim")); for($i=0; $i<sizeof($fileArray); $i++) { echo $fileArray[$i]."<br />"; } }
и … WOW … я получаю этот результат:
Artist1 Title1 Artist2 Title2
??? Что это за символ? Я думаю, что кодировка терпит неудачу. Символ настолько ошибочен, что я не могу вставить их в базу данных, ни с mysql_real_escape_string()
. Фактически я получаю эту ошибку, когда я пытаюсь их вставить:
Incorrect string value: '\x96 Titl...' for column 'atl' at row 1
Как я могу решить эту проблему? Предложения?
РЕДАКТИРОВАТЬ
Попробовал добавить utf8_encode () перед вставкой / добавлением этих строк: теперь Insert не терпит неудачу, но результат:
Artist1 Title1 Artist2 Title2
Поэтому я потерял информацию. Зачем?
Вы должны прочитать статью Джоэла Спольского о UTF-8 и кодировке .
Ваша проблема почти наверняка связана с несоответствием кодировки, ваша первая работа заключается в том, чтобы выяснить, где происходит это несоответствие, ваша проблема может быть в нескольких местах.
1) ваш php-код мог считывать ввод с использованием неправильной кодировки (если вы пытаетесь читать в iso-8859, но исходный файл кодируется каким-то другим способом)
2) ваш PHP-код может записывать выходные данные с использованием неправильной кодировки
3) все, что вы используете для чтения вывода (ваш браузер), может быть настроено на другую кодировку, чем байты, которые вы пишете.
как только вы выясните, какое из трех мест вызывает вашу проблему, вы можете выяснить, как исправить это, поняв, что такое исходная кодировка, и как читать / писать с использованием этой исходной кодировки вместо другой кодировки (что, вероятно, у вашей системы установленным по умолчанию).
EDIT: не зная php хорошо, похоже, вы можете использовать mb_detect_encoding и, возможно, также mb-convert-encoding .
Попробуйте: $str = str_replace('\\x', '&#', $str);