1) Есть исходный файл типа такого:
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>open</wp:ping_status>
<wp:status>future</wp:status>
<wp:post_type>post</wp:post_type>
<category domain="category" nicename="%D0%BF%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D0%B0"><![CDATA[Политика]]></category>
<category domain="post_tag" nicename="%D0%BA%D1%80%D0%B0%D0%B2%D1%87%D0%B5%D0%BD%D0%BA%D0%BE"><![CDATA[кравченко]]></category>
<category domain="post_tag" nicename="%D1%81%D0%BC%D0%B5%D1%80%D1%82%D0%B8"><![CDATA[смерти]]></category>
<category domain="post_tag" nicename="%D0%BC%D0%BE%D0%B3"><![CDATA[мог]]></category>
и другие строки...
2) Задача преобразовать %D0%BA%D1%80%D0%B0% в читаемый английский аналог...
3) Выполнение - логика: читаю построчно файл, когда встречаю строку где есть (domain="category") или (domain="post_tag") - заменяю строку на обработанные данные.
4) Реализация (исходя из своих знаний - буду рад более легкому способу):
<?
// Функция замены символов
function translit($string)
{
$transl = array(
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g",
"Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i",
"Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
"О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
"У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"sch","Ъ"=>"y","Ы"=>"yi","Ь"=>"'",
"Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
"ы"=>"yi","ь"=>"'","э"=>"e","ю"=>"yu","я"=>"ya",
"."=>"_"," "=>"_","?"=>"_","/"=>"_","\\"=>"_",
"*"=>"_",":"=>"_","*"=>"_","\""=>"_","<"=>"_",
">"=>"_","|"=>"_"
);
return strtr($string,$transl);
}
//Подключаю файл исходный и результат
$read='source_importer.xml';
$write1 = 'mod_importer.xml';
$r = fopen($read, 'r');
$w = fopen($write1, 'w');
//Задаю фразы для поиска
$pattern1 = '/domain="category"/';
$pattern2 = '/domain="post_tag"/';
$pattern3 = '/CDATA\[(.*)\]\]/';
//Задаю элементы для заменяемых строк
$part1 = '<category domain="category" nicename="';
$part11 = '<category domain="post_tag" nicename="';
$part2 = '"><![';
$part3 = '></category>';
//Собственно начало работы скрипта
while (!feof($r)) {
$line = fgets($r);
//Ищу первое совпадение
$yes = preg_match($pattern1, $line);
if ($yes == 1) {
//Если есть совпадение ищу ключевое слово, которую буду переводить на транслит
$serch = preg_match($pattern3, $line, $s);
$string = $s[1];
$key = translit($string);
//Вот здесь переменная $key отображается корректно если выставить (echo $key).
// echo $key;
$new_line = $part1.$key.$part2.$s[0].$part3."\r\n";
}
//Если нет совпадения с первым запросом ищу совпадение по 2-му запросу в той-же фразе
else {
$yes = preg_match($pattern2, $line);
if ($yes == 1) {
$serch = preg_match($pattern3, $line, $s);
$string = $s[1];
$key = translit($string);
$new_line = $part11.$key.$part2.$s[0].$part3."\r\n";
}
//Если нет совпадения то новой строке присваиваю значение считанной строки из исходника без изменений
else {
$new_line = $line;
}
}
//Передаю конечную строку в новый файл
$send = fputs($w, $new_line);
}
fclose($r);
fclose($w);
?>
5) После выполнения получаемый результат имеет вот такой вид:
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>open</wp:ping_status>
<wp:status>future</wp:status>
<wp:post_type>post</wp:post_type>
<category domain="category" nicename="rџrѕr»rёs‚rёrєr°"><![CDATA[Политика]]></category>
<category domain="post_tag" nicename="rєsЂr°rІs‡rµrЅrєrѕ"><![CDATA[кравченко]]></category>
<category domain="post_tag" nicename="sЃrјrµsЂs‚rё"><![CDATA[смерти]]></category>
<category domain="post_tag" nicename="rјrѕrі"><![CDATA[РјРѕРі]]></category>
Все что удалось получить в конечном счете - изменяя кодировку полученного файла через меню (в нотпад++) это вот:
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>open</wp:ping_status>
<wp:status>future</wp:status>
<wp:post_type>post</wp:post_type>
<category domain="category" nicename="r࠲߲ܲٳтٲ۲Т><![CDATA[Политика]]></category>
<category domain="post_tag" nicename="r۳rѲӳȲֲ޲۲ޢ><![CDATA[кравченко]]></category>
<category domain="post_tag" nicename="sІݲֳsтآ><![CDATA[смерти]]></category>
<category domain="post_tag" nicename="rݲ߲Ӣ><![CDATA[мог]]></category>
Кто может подсказать где я упускаю эту кодировку и как исправить?
Заранее спасибо!
Спустя 33 минуты, 18 секунд (1.07.2012 - 06:26) walerus написал(а):
Armaghedo Кодировка исходного файла какая?, кодировка скрипта какая?, приложил бы файл, поглядели бы...
Спустя 55 минут, 19 секунд (1.07.2012 - 07:21) Gabriel написал(а):
Цитата |
2) Задача преобразовать %D0%BA%D1%80%D0%B0% в читаемый английский аналог... |
Цитата |
$transl = array( |
я что-то пропустил?
Спустя 7 часов, 59 минут, 48 секунд (1.07.2012 - 15:21) Armaghedo написал(а):
walerus
После вашего вопроса удалил все файлы и создал 2 файла в кодировке utf-8 (source_importer.xml и сам файл с кодом go_translit3.php).
Файл mod_importer.xml - куда сохранялся результат тоже удалил - позволив таким образом скрипту его создать по своему...
Полученые результаты обрадовали! теперь вроде все в порядке!
Спасибо за подсказку!
После вашего вопроса удалил все файлы и создал 2 файла в кодировке utf-8 (source_importer.xml и сам файл с кодом go_translit3.php).
Файл mod_importer.xml - куда сохранялся результат тоже удалил - позволив таким образом скрипту его создать по своему...
Полученые результаты обрадовали! теперь вроде все в порядке!
Спасибо за подсказку!
