Кодировка. Найти запрещённые символы

Тема в разделе "PHP", создана пользователем KillDead, 15 май 2011.

Модераторы: latteo
  1. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    В общем есть php скрипт в кодировке утф-8. Ну что-то вроде
    PHP:
    echo "Привет ણણણ";
    function1(" ણણણ");
    echo 
    "Пока ओओओ";

    Мне нужно перевести это в cp1251. Но там есть символы, которые в новой кодировке нету. Пробовал с помощью iconv\mb_ - получилось только удалить или заменить(попытаться) на эквивалентные. Но это портит функционал.
    Так что пока надо просто найти эти символы, которые отсутствуют в нужной мне кодировке - кто нить видел такие функции?
     
  2. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    а если воспользоваться например AkelPad для преобразования кодировки ?
    а потом сравнить исходный файл и преобразованный файл в например ТotalComander или Araxis Merge ?

    ps а вообще все отсутствующие символы при преобразовании заменяются на знак вопроса обычно
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Обычно- это зависит от того, чем пользуешься- некоторые редакторы заменят на эквивалентный, некоторые на ?, другие удаляют. У меня нотепад и штирлиц- вот они не подходят (по крайней мере я не понял как через них это сделать). Тем более, что мне нужно кучу файлов перевести, в разных папках. И это делать желательно на автомате, а не через 2 программы чтобы потом отредактировать через 3-ю)
    Пока хочу просто найти все запрещённые символы, а потом добавит где надо функцию chr(код символа) в скрипте. По идее должно быть норм
     
  4. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    А зачем собственно такие пляски с бубном? Почему бы просто не использовать utf-8?
    Да и сама постановка вопроса "найти эквивалентные символы" вряд ли верна. Например, какой аналог в 1251 будет для персидской буквы ܮ?
    Даже если вы найдете какой-то способ более менее безопасно заменить юникод на аналог, то проверить все файлы все равно придется, мало ли где вылезит какой символ.
     
  5. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    категорически поддерживаю propovednik, пора уже переходить на utf8, и использовать только его, а не десяток разных кодировок.
     
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    - читаешь файлы посимвольно или строкой, которую затем преобразуешь в массив
    - для каждого символа получаешь код функцией ord (Возвращает ASCII код символа)
    - сравниваешь попадает ли данное число в диапозон запрещенных символов ( в помощь http://www.utf8-chartable.de/unicode-utf8-table.pl)
    - если попадает меняешь на chr(полученный ASCII код)
     
  7. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    спб. всё понятно кроме 3-го пункта. Вот какие диапазоны символов отсутствуют в cp1251? Там я что-то нашёл только группы символов в утф, и их коды.

    Так я же говорю получилось только удалить или заменить(попытаться) на эквивалентные.. Те некоторые всё же имеют какие то похожие (напр какая нибуть круглая буква-> просто О).

    Есть 2 скрипта, их нужно соединить так чтобы один работал в другом-
    1- форум на утф. Он хорошо написан. Даже настройки для смены кодировки (но всё равно все файлы в утф идут, меняются только заголовки).
    2- портал на cp1251 - довольно большой, с кучей модулей- он намертво прикручен к кирилице.

    Вот и такая ситуация- форум довольно громоздкий, но всё же качество написания его оставляет надежду что смену кодировки он перенесёт. А портал - он во первых работает (если сломается форум- не беда, а вот портал- оч плохо). И писался он так- разработчики приняли, что будет только 1 язык, русский, и везде соответственно кодили.
     
  8. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    очень слабо представляю себе такой код который сложно перевести на utf8, будь там хоть к японскому языку привязка, сливаешь на тестовый домен, конвертируешь в utf8 все файлы и базу, а портал себе пусть работает как работал. Смотришь как он себя поведет на тестовом домене, очень большая вероятность того что все будет хорошо, в худшем случаее всплывет пара-тройка ошибок, которые будет не долго исправить.
     
  9. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Кэп? если не считать что все строковые функции могут давать ошибку, а некоторые просто будут это делать, тк утф - это многобайтовая кодировка. Да и в самом движке есть пляски с утф и нужно будет там смотреть и вырезать эти места. + всё таки мне надо форум поставить на сайт, те не хочется лишаться поддержки всех модулей портала, а форум- это второстепенно.
    Да и перевести утф в кирилицу, примерно столько же гемора.
    ------------
    Возвращаясь к первоначальному тз - пока идея тупая, iconv удаляет после запрещённого символа (если не задавать опции), -> просто запускаем его и если он что-то обрезал у исходника 1 символ удаляем, затем опять iconv)
     
  10. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    Берем таблицу cp1251 и смотрим...
    Придется откинуть все что не является спец символами(@#!& и т.д.),
    а так же все что не латиница или кирилица.