Так что я работаю на сайте, где болит информация о клинописных табличках. Мы используем семитные символы для транслитерации.
В моем скрипте я создаю список терминов из транслитации планшета.
Моя проблема в том, что в Š мой сценарий создал два разных термина, потому что он думает, что в слове есть пробел из-за того, как торт обрабатывает специальный символ.
Пример:
Частичное содержимое планшета:
- UTU-Dis-ню il2
Термины с планшета при обработке моим скриптом:
УТУ-ДИШ, -nu-il2
должно быть:
UTU-Dis-ню il2
Когда я печатаю содержимое моего массива в ходе обработки содержимого, я вижу это:
- utu-DIn -nu-il2
Таким образом, это означает, что неправильный анализ текста создает пробел, который интерпретируется в моем сценарии как 2 слова вместо одного.
В базе данных текст в порядке ...
Я также получаю эти ошибки:
Предупреждение (512): ошибка SQL: 1366: неверное строковое значение: '\ xC5' для столбца 'term' в строке 1 [CORE \ cake \ libs \ model \ datasources \ dbo_source.php, строка 684]
Запрос: INSERT INTO terms
(term
, lft
, rght
) VALUES ('utu-DI ', 449, 450)
Запрос: INSERT INTO terms
(term
, lft
, rght
) VALUES ('A ', 449, 450)
Запрос: INSERT INTO terms
(term
, lft
, rght
) VALUES ('xDI ', 449, 450)
Кто-нибудь знает, что я мог сделать, чтобы сделать эту работу?
Спасибо!
Добавлена информация:
$terms=$this->data['Tablet']['translit'];
$terms= str_replace(array('\r\n', '\r', '\n','\n\r','\t'), ' ', $terms);
$terms = trim($terms, chr(173));
print_r($terms);
$terms = preg_replace('/\s+/', ' ', $terms);
$terms = explode(" ", $terms);
$terms=array_map('trim', $terms);
$anti_terms = array('@tablet','1.','2.','3.','4.','5.','6.','7.','7.','9.','10.','11.','12.','13.','14.','15.','16.','17.','18.','19.','20.','Rev.',
'Obv.','@tablet','@obverse','@reverse','C1','C2','C3','C4','C5','C6','C7','C8','C9', '\r', '\n','\r\n', '\t',''. ' ', null, chr(173), 'x', '[x]','[...]' );
foreach($terms as $key => $term) {
if(in_array($term, $anti_terms) || is_numeric($term)) {
unset($terms[$key]);
}
}
Если я поставлю свой print_r перед прегом, S будут хорошими, если я сделаю это после, они будут отображаться с чёрной лепешкой. Так что я думаю, что функция preg - это проблема!
только что нашел это:
http://www.php.net/manual/fr/function.preg-replace.php#84385
Но похоже, что
* * Mb_ereg_replace тысячи семьдесят-девять ()
вызывает ту же проблему, что и preg_replace () ....
Раствор:
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");
$terms = mb_ereg_replace('\s+', ' ', $terms);
и ошибка исчезла ...!