день добрый, вопрос не однократно обсуждался на множестве форумов про кодировки и у всех уже вызывает пену у рта когда кто-то создает такую тему вновь, но я все же рискну, так как сижу над бедой уже вторую неделю и до того как решиться создать тему, облазил не один форум чем я пользуюсь: IIS 6.0, php 5, sql 5.1 (управляю с помощью dbforge) ВЕЗДЕ стоит кодировка utf-8: базы sql в utf-8 лайкчаром даже выводил информацию Код (Text): character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server latin1 character_set_system utf8 character_sets_dir C:\Program Files\MySQL\MySQL Server 5.1\share\charsets\ в iis прописал в заголовках HTTP Content-type text/html; charset=utf-8 в самом сайте кодировку utf-8, да и сам сайт сохранил в кодировке utf -8 Код (Text): mysql_query ("SET CHARACTER SET 'utf8'"); mysql_query ("set character_set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set character_set_database='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); mysql_query ("SET NAMES utf8"); но проблема остается: должен производиться поиск по бд, если идет поиск по ангийским символам, то все на ура, иногда на ура и поиск по кириллице, НО зачастую происходит замена символов и почему так мне не понятно ПРИМЕР: Я ищу Иванова в базе данных, но мне отображается что поиск по базе производится по слову Иваннв и соответственно ничего не находит Сидоров заменяется на СШХнрнв а вот например Бацаев абсолютно нормально воспринимается и выдает информацию какая есть в базе по данному человеку Вроде все подробно описал, надеюсь поможете разобраться в этом нелегком для меня деле =) зы: прошу не надо писать: поставь вместо форджа пхпмайадмин, вместо ииса апач и тому подобное, такой возможности просто нет, работаю с чем есть.
делаю вывод, грубо говоря вот куски кода формирующие вывод информации Это html-часть Код (Text): искать в: <input type="text" name="find" /> по <Select NAME="field"> <Option VALUE="familia">фамилия</option> </Select> <input type="hidden" name="searching" value="yes" /> <input type="submit" name="search" value="искать!" /> PHP-часть Код (Text): if (isset($_POST['find'])) { $find =$_POST['find']; $find = strtoupper($find); $find = strip_tags($find); $find = trim ($find); echo "<b>поиск по:</b> " .$find;} собственно на выходе получается не то что я вводил
не, сейчас проверил, вывод сразу после объявления if (isset($_POST['find'])) { $find =$_POST['find']; вставил+ оставил старый вывод Получилось так: то что я ввел, вывод сразу после Пост-выдает все правильно. то что в самом конце-выдает искаженный вариант
так по порядку, дабы путаницы у нас небыло вывод намбер 1-сдесь все правильно Код (Text): if (isset($_POST['find'])) { $find =$_POST['find']; echo "<b>поиск по:</b> " .$find; вывод намбер 2-вот тут косяк происходит Код (Text): $find = strtoupper($find); echo "<b>поиск по:</b> " .$find; закоментил строку и все встало на свои места, спасибо хоть понял что ему не нравилось но появился вопрос, а почему ? это ведь команда преобразования в верхний регистр ? не подскажешь для общего развития, а то раньше как-то никогда с этой командой небыло проблем
а хз я не работал с ней. зачем тебе вообще этот верхний регистр? попробуй http://php.ru/manual/function.mb-strtoupper.html предварительно установив http://php.ru/manual/function.mb-internal-encoding.html
потому что не-mb_* функции умеют работать только с однобайтными кодировками, типа 1251 (и то только когда локаль указана правильно) говорят в будущем, где-нибудь к версии PHP 7, произойдет смена приоритетов, а пока приходится постоянно помнить о том, что пыха не вполне уникодная.