Forum Webscript.Ru

Программирование => PHP => Тема начата: Matold от 09 Ноября 2005, 01:19:09

Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: Matold от 09 Ноября 2005, 01:19:09
Здравстуйте!
У меня при импорте русского текста из excela в базу пишется
опис4
- такая строка. А я хочу перед самим импортом заменить эту строку на нормальные русские символы. На php.net я чет не разобрался с ф-иями, там самодельные примеры, но они не работают у меня (похоже применяю не правильно (( ) Вообщем если кто-то похожее делал - напишите пример плиз, как это возможно осуществить....
Заранее спасибо за вашу помощь!!!
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: attilla от 09 Ноября 2005, 02:00:11
Плохо искал ;)
http://ru.php.net/html_entity_decode


$text="опис4";
print (html_entity_decode($text));
?>
 

И получи свою опис4
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: Matold от 09 Ноября 2005, 02:12:19
Так фишка в том, что если посмотреть страницу в виде html - то опис4 - такая фигня не изменится на русские символы. С выводом на экран пользователю проблем нету. Проблема в том например, что когда в базе хранятся вместо русских символов &#xxxx&#yyyy, то  поиск не будет работать.
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: Matold от 09 Ноября 2005, 02:12:58
Вот тут есть по теме :) Разбирайюсь сейчас (http://phpclub.ru/faq/wakka.php?wakka=encodings/encodings2&v=1c8a)
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: pauk от 09 Ноября 2005, 11:51:57
Цитировать
Matold:
то поиск не будет работать

будет, если искать не "опис4", а опис4
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: Matold от 09 Ноября 2005, 12:04:48
Ок :) Поиск будет работать, но не так, как хотелось бы :)

Может кто насчет регулярных выражений поможет:

//ЗАМЕНЯЕТ опис4 на опис4
function Unicode2Charset($str, $charset = \'Windows-1251\') {
  return preg_replace(
    \'~&#(?:x([\\da-f]+)|(\\d+));~ie\',
    \'iconv("UTF-16LE", $charset, pack("v", "$1" ? hexdec("$1") : "$2"))\',
    $str
  );
}

А как изменить регулярное выражение, чтобы оно заменяло
 
опис4 на опис4?

(во втором случае символы не разделены ; )
Просто когда меняю регулярное выражение на то, что в  FAQ (http://phpclub.ru/faq/wakka.php?wakka=encodings/encodings2&v=1c8a) дописано - возвращает пустую строку.
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: pauk от 09 Ноября 2005, 12:15:41
Спецификация требует разделения через ";"
Обработай строку с заменой
&#
на
;&#
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: Matold от 09 Ноября 2005, 12:17:23
Точно :) Я тоже уже решил так сделать... Спасибо за помощь!
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: pauk от 09 Ноября 2005, 12:38:40
Только в начале не забудь удалить ";"
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: Matold от 09 Ноября 2005, 13:30:26
Вот, может кому-нить еще пригодится :)
    $ret = \'\';
    for( $i=0; $i        $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
        $ret .= \'&#\'.$charcode;
    }
     return HTMLtoKOI($ret);
}
function HTMLtoKOI($str){
  $str = preg_replace(\'~&#(\\d+)~se\',\'html_entity_decode("$0".";",ENT_QUOTES,"CP1251")\',$str);
  $str = str_replace(";","",$str);
  $str = preg_replace(\'~&#(\\d+)~se\',\'\\\\1>1103 ? "\\\\0;" : (\\\\1>848 ? chr(\\\\1-848) : chr(\\\\1))\',$str);
  return trim($str);
} ?>
Название: Помогите пожалуйста... & # 1086 надо перевести в символы... Очень нужно
Отправлено: pauk от 09 Ноября 2005, 15:23:41
Напиши статейку и опубликуй :)
А то поиском мало кто пользуется