PHP:使用 iconv 处理特殊字符
2022-08-30 14:17:24
我仍然不明白是如何工作的。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 = "&";
有两组不同的输出,我需要将它们存储在数据库表内的两个不同列中,
我需要转换为干净的网址。
Löic & René
Loic & Rene
我需要保持它们原样 - 因为只有当它们在我的html页面上显示它们时,才转换它们。
Löic & René
Löic & René
htmlentities($string, ENT_QUOTES);
我尝试了下面 php.net 中的一些建议,但仍然不起作用,
我遇到过这样的情况:我需要一些字符的音译,但其他字符被忽略了(对于像ayn或hamza这样的奇怪变音符号)。添加 //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>