Tôi vẫn không hiểu cách hoạt động của iconv
.PHP: Xử lý các ký tự đặc biệt với biểu tượng
Ví dụ,
$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
tôi nhận được,
Chú ý: iconv() [function.iconv]: phát hiện một nhân vật bất hợp pháp ở đầu vào chuỗi trong ...
$string = "Löic";
hoặc $string = "René";
tôi nhận được,
Thông báo:. iconv() [function.iconv]:
phát hiện một ký tự multibyte không đầy đủ trong chuỗi đầu vào trong
Tôi nhận được gì với $string = "&";
Có hai bộ đầu ra khác nhau tôi cần lưu trữ chúng trong hai khác nhau cột bên trong bảng cơ sở dữ liệu của tôi,
tôi cần phải chuyển đổi
Löic & René
đểLoic & Rene
cho url sạch pu đề xuất.Tôi cần giữ chúng như cũ -
Löic & René
dưới dạngLöic & René
sau đó chỉ chuyển đổi chúng vớihtmlentities($string, ENT_QUOTES);
khi hiển thị chúng trên trang html của tôi.
Tôi đã thử với một số gợi ý trong php.net dưới đây, nhưng vẫn không hiệu quả,
tôi đã có một tình huống mà tôi cần một số ký tự phiên âm, nhưng những người khác bỏ qua (cho dấu lạ như Ayn hoặc hamza). Thêm // TRANSLIT // IGNORE dường như làm thủ thuật cho tôi. Nó chuyển ngữ tất cả mọi thứ có thể được chuyển ngữ, nhưng sau đó ném ra những thứ không thể.
Vì vậy:
$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!
và khác,
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
Làm thế nào tôi có thể thực sự làm việc chúng ra?
Cảm ơn.
EDIT:
Đây là tập tin nguồn tôi thử nghiệm mã,
<!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: bạn nhận ra 'ö' &' é' nằm trong ISO-8859-1 không?Ngoài bộ ký tự đầu vào không đúng, bạn có thể muốn thay đổi bộ ký tự đầu ra của mình thành 'ASCII // TRANSLIT'. – Wrikken
Tôi rất bối rối với các bộ ký tự này ... – laukok
Cảm ơn! Tôi đã phải giải mã một số ký tự tiếng Hàn thành UTF-8 và đó là một cơn đau đầu thực sự - cuối cùng, điều duy nhất đã giúp là: '$ conversion = iconv ('EUC-KR', 'UTF-8 // TRANSLIT', $ – ShayLivyatan