PHP: обработка специальных символов с помощью iconv - PullRequest
27 голосов
/ 25 января 2011

Я до сих пор не понимаю, как работает iconv.

Например,

$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 

Я получаю,

Примечание: iconv () [function.iconv]: обнаружен недопустимый символ во входной строке в...

$string = "Löic"; или $string = "René";

Получаю,

Примечание: iconv() [function.iconv]: Обнаружен неполный многобайтовый символ во входной строке в.

Я ничего не получаю с $string = "&";

Есть два набора разных выходных данных, которые мне нужно хранить в двух разных столбцах внутри таблицы моей базы данных,

  1. Мне нужно конвертировать Löic & René в Loic & Rene для целей чистого URL.

  2. Мне нужно оставить их такими, как они есть - Löic & René как Löic & René, затем конвертировать их толькос htmlentities($string, ENT_QUOTES); при отображении их на моей html-странице.

Я попытался с некоторыми советами из php.net ниже, но все равно не работает,

У меня была ситуация, когда мне нужно было транслитерировать некоторые символы, но другие игнорировали (для странных диакритических знаков, таких как айн или хамза).Добавление // TRANSLIT // IGNORE, похоже, помогло мне.Он транслитерирует все, что может быть транслитерировано, но затем выбрасывает вещи, которые не могут быть.

Итак:

$string = "ʿABBĀSĀBĀD";

echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $string);
// output: [nothing, and you get a notice]

echo iconv('UTF-8', 'ISO-8859-1//IGNORE', $string);
// output: ABBSBD

echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $string);
// output: ABBASABAD
// Yay! That's what I wanted!

и другое,

Andries Seutens 07-Nov-2009 07:38
When doing transliteration, you have to make sure that your LC_COLLATE is properly set, otherwise the default POSIX will be used.

To transform "rené" into "rene" we could use the following code snippet:
setlocale(LC_CTYPE, 'nl_BE.utf8');

$string = 'rené';
$string = iconv('UTF-8', 'ASCII//TRANSLIT', $string);

echo $string; // outputs rene

Как я могу на самом деле их решить?

Спасибо.

РЕДАКТИРОВАТЬ:

Это исходный файл, я проверяю код,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" class="no-js">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<?php
$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 
?>
</html>

Ответы [ 2 ]

21 голосов
/ 09 февраля 2012
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', utf8_encode($s));
14 голосов
/ 25 января 2011

А вы сохранили исходный файл в кодировке UTF-8?Если нет (и я думаю, что вы этого не сделали, то это приведет к ошибке «неполный многобайтовый символ»), попробуйте сначала.

...