пример - статья с заголовком
ΔΕΝ ΣΕ ΕΝΔΙΑΦΈΡΕΙ ΠΩΣ ΑΙΣΘΆΝΟΜΑΙ
урл для него транслитерированный
den-se-endiaferei-pos-aisthanoma i
статью перевел вася с заголовком
ПЕРЕВОД ТЕСТ
и урлом
perevod-test
перевел мойша с заголовком
למנצח על-המחולות
и урлом
lm-sh-al-hmhwlwt
ТУТ уже нет гласных и много вариантов для транслитерации
дальше ее перевел ахмед с заголовком
الأحلام، وأنهم جميعا الحصول عليها
и урлом
?
тут тоже нет гласных и 100500 языковых наречий и символов, что все сразу и не учтёш для замены, получаем малочитаемый текст урла, strtr() не получается, пробую заменяеть посимвольно с проверкой есть ли исходный символ как ключ для замены, и получаем для непредусмотренных символов ошибку - сохранение статьи не проходит
символа ا нет в массиве
символа ل нет в массиве
при rawurlencode() для الأحلام، وأنهم جميعا الحصول عليها имеем для хранеия в бд
string(186)
если применить rawurlencode() для "сложных языков"и в бд, то получается длинно, хоть красиво при отображении ссылки для пользователя, (гуглу ведь пофиг)
как правильнее все организовать, ваше видение этого, как хранить преобразованные ссылки в бд индексить их, иль преобразовывать на лету при вводе выводе, а хранить сам текст
както так. ?
обернул в html, а то не прерывает строку
добавлю
дык для сербского например траслитим (пока) по двум вариантам для Вуковицы - по кирилическому, для Гаевицы - по романическому, типа заменяя ź=>zh,
для некоторых языков
ź => z (так них подсмотрел, в сео гугль выделяет в урле для польского точно)
сори проправлю тут еще раз
модератор не катит проект не коммерческий ( пока) нужно чтобы автоматически рубало, сейчас 1к авторов 100к текстов и переводов
склоняюсь к rawurlencode() там индекс для latin1 777
вот спрашиваю советов
вижу так:
храним в куки массив как строку
при новом просмотре проверяем есть ли в массиве
- если есть ничего - не делаем
- если нет - удаляем последний элемент, новый в начало массива
для выбора из бд берем ключи и подставляем в in (в зависимости от порядка следования ид в бд можно сортирнуть ключи), получив данные присваиваем их по ключам начального массива -> получаем циклом вывод в порядке просмотра
привет всем, не заходил очень давно, но появился повод...
посмотрел вокруг, активны старые пользователи, но как и сказано - набегами, много новых пользователей
это хорошо что форум еще живой и активный, хотя на сейчас вижу что посещаемость просела.
Здравствуйте, давненько не был, но появился повод спросить:
работаю над сайтом где есть... статьи на разных языках и переводы к ним на русский (и между языками), основной упор - переводы на русский.
языков много, среди них иврит, греческий, арабский, японский и тд, включая европейские и кириллические.
урлы в пределах каждого автора должны быть уникальны.
делал так:
для кирилических транслитерировал и в базу (utf-8)
для европейских романоподобных польский, чешский, немецки, французский и тд - тоже транслитерировал, но тут стали появляться отличия (по буквам/звукам, в правилах транслитерации по сравнению с родными для языка сайтами)
теперь добавились иврит, греческий, арабский, японский и тд, просмотрев "ихние" сайты - вижу что они урлят так сказать и на своей локали.
сейчас же вижу картину работы подругому:
- для русских языков - транслит
- для романских - как есть
- иврит, греческий, арабский, японский - ?
все их в rawurlencode() и в бд
вопрос :
как правильно/лучше/быстрее сохранять/хранить/выводить
а также индексировать в бд, какую кодировку для сравнения использовать, размер поля...
требуется сохранить дружественность внешнего вида урла для посетителей
учесть СЕО, (получать и иностранных посетителей на сайт)
в общем кто сталкивался - подскажите как у вас, как вы видите это?
(надеюсь доступно изложил суть)
спасибо
не до конца понял, но может быть так:
повесить событие на элемент и при его изменении
$(document).on('change',...
отправлять ajax тип данных, а на сервере проверять - если город - возвращать улицы, если улица - соответственно дома и тд.
сорри за много букв, но не делал такое, поэтому сложно самому выдумать алгоритм
праздники прошли, реализовал часть функционала под требования:
пользователь -
при добавлении xml-файла пользователь сразу жёстко выбирает раздел и категорию + город (привязанный к аккаунту)
заливает файл, он на ходу проверяется на длинну (в 1000 элементов), xsd схему, сразу показываем ошибки если они есть
модератор -
может просмотреть данные и одобряет/отклоняет файл целиком, если одобряет - вычитываем данные в постоянную таблицу очереди, привязав к пользователю и xml-файлу
пользователь далее -
видит одобренные файлы, оплачивает(или бесплатно) файл ставится в очередь на исполнение, кроном мержится по частям с основной таблицей
???
далее есть вопросы
если можно направьте как лучше сделать:
при обработке нового файла - кроном по частям выбираем связанные записи и звносим в основную таблицу - файлу ставим статус "обработан"
? - что можно использовать на обычном хостинге для обработки очереди (чтоб за раз файл вычитывать и мержить с основной таблицей, тк нагрузка есть- кроме вставки выполняется жменя запросов на агрегацию данных)
? после соединения может удалять данные из таблицы очереди
далее, например через неделю у пользователя изменились цены например и часть данных, и он обновляет файл
как вот тут поступить, если можно поподробнее
? может в xml-файл хеш данных совать чтоб их потом сравнивать.
? сравнивать данные нового файла с данными табл. очередей и новые данные вставить, а для изменившихся - метку для обновления в основной таблице или обновлять все подряд
? как не затратно отсеять те что надо удалить
на данном этапе только ручно планирую, (бесплатно например раз в неделю 1 файл на 1000 элементов, для каждой конечной категории или 3 файла) пользователь загрузит файл, он валидируется
вот тук как мне
сразу писать - нагрузка на бд в основной таблице, поэтому думаю что
первый раз - может как-то сложить в таблицу в очередь все запросы на добавление, а потом уже вставлять в основную таблицу по частям кроном например
при повторной загрузке сравнивать и в очередь только новые, удалённые или измененные
вопрос как сравнивать?
читать лучше в цикле simplexml_load_file целиком или лучше XMLReader по частям очищая память на каждой итерации?
если не сложно напишите чуть подробней алгоритм который видится Вам
спасибо
здравствуйте
возникла задача для ресурса, пользователи просят сделать такую функцию - выгрузка товаров из xml
планируется алгоритм:
пользователь загружает файл
модератор проверяет
пользователь жмет внести - данные заносятся в бд
повторно загружает файл - тоже, толдько сравнить файлы (переведём в пхп массивы) (планируется сравнивать хеш от данных в элементе) и внести изменения (удалить, обновить, добавить)
подскажите пожалуйста варианты (правильный) алгоритм работы?
как лучше сравнивать файлы?
как это организовать автоматически с минимумом затрат?
при разворачивании нового экземпляра одного старого проекта через некоторое время обнаружил что поле с типом double не так как планировалось сохраняет данные (агрегация количественных параметров).
те
имеем числа с максимум 8 знаков в целой части и 12 знаков после запятой,
поле используется как первичный ключ.
например число 1900.000000000179
сохраняет и заносит в бд тк есть, а на хостинге, где разворачивал проект
оказалось 1900.00000000018
в связи с чем пошел перекос данных.
(это ничего мы данные еще раз перегоним...)
запланировано использовать decimal (20,12), тк целое может быть max mediumint
кто сталкивался почему это могло произойти??
какой тип поля лучше использовать?
спасибо
или
phone_img : "адрес_сайта/
"pg/0Rk7tpfgMNdaRqC0p4egaVaWbuPt9fWQLHafaYFuhUfVJbQLe5F4EeGd6NznYMabRSMeI.gif"
каждый раз при обращении разная строка.
при прямом обращении через браузер - отдается картинка, причем одна и таже с цифрами (номер телефона)
а на сайте - строка из цифр после аякс запроса, следовательно js преобразует както
по идее требуемая часть - последняя от / , может посимвольно как коды сисволов закодировано?
a = a +this._keyStr.charAt(j)+this._keyStr.charAt(g)+this._keyStr.charAt(e)+this._keyStr.charAt(d)
}
return a
},
decode:function(c){
var a ="";
var k, h, f;
var j, g, e, d;
var b =0;
c = c.replace(/[^A-Za-z0-9\+\/\=]/g,"");
while(b < c.length){
j =this._keyStr.indexOf(c.charAt(b++));
g =this._keyStr.indexOf(c.charAt(b++));
e =this._keyStr.indexOf(c.charAt(b++));
d =this._keyStr.indexOf(c.charAt(b++));
k =(j << 2)|(g >> 4);
h =((g & 15)<< 4)|(e >> 2);
f =((e & 3)<< 6)| d;
a = a + String.fromCharCode(k);
if(e != 64){
a = a + String.fromCharCode(h)
}
if(d != 64){
a = a + String.fromCharCode(f)
}
}
return a
},
recursiveDecode:function(b){
for(var a in b){
if(typeof(b[a])=="object"){
b[a]=this.recursiveDecode(b[a])
}else{
b[a]=this.decode(b[a])
}
}
return b
}
};
если сталкивались с подобным подскажите, на что похоже, чем можно раскодировать строку - получить номер телефона, куда копать
(решил все задачи, с этой бьюсь 3й день)
куда копать хотябы?
"SELECT `razdel_id`, (CASE WHEN `razdel_$lang`!='' THEN `razdel_$lang` ELSE `razdel_langru` END) AS `razdel_name` FROM `razdel` ORDER BY `razdel_name`"