Nadal nie rozumiem, jak działa iconv
.PHP: Radzenie sobie ze znakami specjalnymi z iconv
Na przykład
$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
otrzymuję,
Wskazówka: iconv() [function.iconv]: wykryto niedozwolony znak w ciąg wejściowy w ...
$string = "Löic";
lub $string = "René";
otrzymuję,
Wskazówka:. iconv() [function.iconv]:
Wykryto niepełny charakter wielobajtowy w ciągu wejściowego w
mogę nic z $string = "&";
Istnieją dwa zestawy różnych wyjść muszę przechowywać je w dwóch różnych kolumny wewnątrz tabeli mojej bazy danych,
muszę konwertować
Löic & René
doLoic & Rene
dla czystej url pu zagraża.muszę utrzymać je, ponieważ są one - jak
Löic & René
Löic & René
następnie konwertować jehtmlentities($string, ENT_QUOTES);
podczas wyświetlania ich na mojej stronie html.
Próbowałem z kilkoma sugestiami w php.net poniżej, ale nadal nie działają,
miałem sytuację, gdzie potrzebne niektóre znaki w transliteracji, ale inni ignorowane (dla dziwnych znaków diakrytycznych, takich jak Ayn lub hamza). Dodawanie // TRANSLIT // IGNORE wydawało mi się, że to dla mnie wystarczające. To transliteruje wszystko, co może być transliterowane, ale potem wyrzuca rzeczy, które nie mogą być.
Więc:
$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!
a inny,
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
Jak mogę faktycznie pracują je?
Dzięki.
EDIT:
Jest to plik źródłowy przetestować kod,
<!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>
BTW: czy zdajesz sobie sprawę, że 'ö' &' é' są w ISO-8859-1?Oprócz niewłaściwego zestawu znaków wejściowych, możesz zmienić swój zestaw znaków wyjściowych na 'ASCII // TRANSLIT'. – Wrikken
Jestem tak zdezorientowany tymi zestawami znaków ... – laukok
Dzięki! Musiałem rozszyfrować niektóre znaki koreańskie do UTF-8 i to był prawdziwy ból głowy - ostatecznie jedyne, co pomogło, to: '$ convert = iconv ('EUC-KR', 'UTF-8 // TRANSLIT', $ data); ' – ShayLivyatan