PHP: <?php $str=<<<HERE <td class="label">Пол:</td> <td class="data"> <div class="dataWrap"> <a href='/gsearch.php?from=people&c[sex]=1'>женский</a> </div> </td> HERE; preg_match("/sex\]=(\d)'>(.+?)<\/a>/", $str, $match); print_r($match); ?>
Играть так играть PHP: <?php $str = " <a href='/gsearch.php?from=people&c[sex]=1'>женский</a>"; preg_match_all ("|a href=.*people&c\[.*\].*>(.*)</a>|",$str,$arr); print_r ($arr[1]); ?>
Подскажите электронную литру по PHP, надо чтобы в книге было полно практических задач и примеров, а не сплошная теория которая на следующий день забывается. Но не для полного нуба, (не с 0-ля я основы знаю + C++). и не толстая, а то лень учить. с меня + Самое главное научиться эфективно юзать PHP, и писать свои CMS, etc. И понимать спокойно сорцы других CMS.
Использую загрузчик файлов отсюда http://swfupload.org/ Если файл состоял из русских букв то получаем из PHP: $_FILES['Filedata']['name'] вот такую бредятину: RњRµR¶RґSѓ_RЅRµR±RѕRј_Ryo_R·RµRјR»RµR№ Хотя было: Между небом и землей В какой кодировке RњRµR¶RґSѓ_RЅRµR±RѕRј_Ryo_R·RµRјR»RµR№ определить так и не удалось поэтому и как решить проблему не знаю, хотя нет знаю iconv() только вот какая это кодировка ?
KOI-8 наверн... хотя попробуй и из : PHP: $name = iconv('UTF-8', 'WINDOWS-1251', $_FILE); $name = iconv('KOI8_R', 'WINDOWS-1251', $_FILE); $name = iconv('KOI8_U', 'WINDOWS-1251', $_FILE); вот топик на форуме про кодировку http://swfupload.org/forum/generaldiscussion/526 вроде как UTF-8
Прогнал эту строку через кучу всевозможных кодировок, и результат отрицательный. Так что скорее всего проблема где-то в коде... Попробуйте испытать это дела на файлах: а.jpg б.jpg я.jpg (можно и без расширения) И посмотрите на HEX коды...
UTF-8 пробовал сразу же как заметил проблему не помогло. Сейчас остальное попробовал, только некоторые символы поменялись например KOI8_R выдал R‘S‹R»Rѕ_Ryo_RїSЂRѕS€R»Rѕ a.mp3 - ./files/R°.mp3 я.mp3 - ./files/SЏ.mp3 В коде нет проблем, до этого стоял обычный загрузчик и обрабатывал как русские так и англ названия на ура, так же из mp3 берутся id тэги и с ними все отлично, так же если переименовать файл то он воспроизводится через flash player следовательно файл не бьется! UPDATE: Опа решил проблему, только я в шоке =) PHP: $_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']); Не работало! PHP: $_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']); $_FILES['Filedata']['name'] = iconv('WINDOWS-1251', 'UTF-8', $_FILES['Filedata']['name']); $_FILES['Filedata']['name'] = iconv('UTF-8', 'WINDOWS-1251', $_FILES['Filedata']['name']); Заработало Не понимаю логики
Да и я уже как неделю усвоил перед тем как работать с данными принятыми по ajax нужно их сразу же переводить в windows-1251, иначе после работы с ними уже не переведешь и будут каракули навсегда. На страницу ничего не выводится, сразу в базу идет, а база cp1251_general_ci да и названия файлов перед тем как идти в базу транслируются (Было-стало в Bilo-stalo)и удаляются пробел,&,'," и прочие знаки которые могут помешать отдать файл через браузер.
Народ, вопрос наверное не из простых.. дан текстовой файл (юникс утф8) суть вот в чём: надо каждую строчку этого файла занести в массив. Думал юзать file(), да есть тут одна особенность: обратите внимание на символ '\' в коде, а вернее на комбинацию 'перевод строки' + '\' + перевод строки, так вот, надо эту комбинацию учитывать как просто символ в контенте "текст1" или "текст2" и т.п. и не использовать их как команду для разбивки текста в массивы... .т.е. в итоге, как видно, у нас должно быть три значение в массиве: Надеюсь, понятно обьяснил)) Или всё придётся preg_replace'ом заменить их сначала на что-то отличное от перевода строки, а уж потом юзать file()???
PHP: <?php $file = 'file.txt'; $file = file($file); $i = 1; foreach ($file as $line) { if (substr($line, 0, 1) == $i) { $array[] = $line; $i++; } else { $array[count($array) - 1] .= $line; } } print_r($array); ?> Без использования регулярок Выведет: Code: Array ( [0] => 1|текст1|текст2|текст3 [1] => 2|текст1|текст2 \ текст3 \ текст4|текст5 [2] => 3|текст1|текст2|текст3 )
имею мнение, что данный код сработает ТОЛЬКО в одном случае, что собственно и было видно следующих постах. только при PHP: $name = iconv('KOI8_U', 'WINDOWS-1251', $_FILE); т.к. иконв возвращает только в одном случае если входящая кодировка указана верно. поэтому выше представленный код НЕ верен. и имеет место быть только в таком виде: PHP: $name['UTF'] = iconv('UTF-8', 'WINDOWS-1251', $_FILE); $name['KOI8R'] = iconv('KOI8_R', 'WINDOWS-1251', $_FILE); $name['KOI8U'] = iconv('KOI8_U', 'WINDOWS-1251', $_FILE); и после удалить все элементы массива которые пусты. останется только ОДИН элемент массива в ключе которого будет кодировка текста
RedBull@12, Эм...Вообще-то тот код был наводкой =) Поменять имя переменной куда ложим результат дело пары секунд, да и зачем делать ложить в массив, а потом еще удалять пустые элементы когда достаточно просто проверить все варианты и найти рабочий ?
код представленный принципиально не верный, ибо он верен только в одном случае. а на сколько "дешевле" проверить все варианты допустим если будет гораздо больше. а во-вторых зачем проверять чем-то когда 2 функции вернут нужный результат. и я сказал именно об особенности функции iconv. о то что если входящая кодировка указана не верно то вернет пустой результат, и исправил приведенный код, а не показал как правильно проверять кодировку.