我试图从PHP字符串中的字符中删除重音符号作为使字符串在URL中可用的第一步.
我正在使用以下代码:
$input = "Fóø Bår";
setlocale(LC_ALL, "en_US.utf8");
$output = iconv("utf-8", "ascii//TRANSLIT", $input);
print($output);
Run Code Online (Sandbox Code Playgroud)
我期望的输出将是这样的:
F'oo Bar
Run Code Online (Sandbox Code Playgroud)
但是,不是重音字符被音译,而是用问号代替:
F?? B?r
Run Code Online (Sandbox Code Playgroud)
我在网上找到的所有内容都表明设置语言环境将解决这个问题,但我已经这样做了.我已经检查了以下细节:
locale -a)iconv -l)mb_check_encoding函数验证,如mercator的答案中所建议的那样)setlocale成功(返回'en_US.utf8'而不是FALSE)服务器正在使用iconv的错误实现.它有glibc版本而不是所需的libiconv版本.
请注意,某些系统上的iconv功能可能无法正常工作.在这种情况下,安装GNU libiconv库是个好主意.它最有可能最终得到更一致的结果.
- PHP手册对iconv的介绍
有关PHP使用的iconv实现的详细信息包含在phpinfo函数的输出中.
(我无法使用正在为此项目工作的服务器上的正确iconv库重新编译PHP,因此下面我接受的答案是在没有iconv支持的情况下删除重音的最有用的答案.)
我正在尝试将一堆文件从US-ASCII转码为UTF-8.
为此,我正在使用iconv:
iconv -f US-ASCII -t UTF-8 file.php > file-utf8.php
Run Code Online (Sandbox Code Playgroud)
事情是我的原始文件是US-ASCII编码,这使得转换不会发生.显然它会发生因为ASCII是UTF-8的一个子集......
引用:
在引入非ascii字符之前,不需要显示文本文件
真正.如果我在文件中引入非ASCII字符并保存它,那么假设使用Eclipse,文件编码(charset)将切换为UTF-8.
在我的情况下,我想强制iconv将文件转码为UTF-8.是否存在非ASCII字符.
注意:原因是我的PHP代码(非ASCII文件...)正在处理一些非ASCII字符串,这导致字符串不能很好地解释(法语):
Ilétait une fois ... l'hommesé©animéemythique d'Albert
Barillé(Procidis),1?
...
编辑
US-ASCII- 是 - 的一部分UTF-8(见下面Ned的回答)US-ASCII文件是在实际编码UTF-8我有一堆不是UTF-8编码的文件,我正在将一个站点转换为UTF-8编码.
我正在使用简单的脚本来保存我想要保存在utf-8中的文件,但文件以旧编码保存:
header('Content-type: text/html; charset=utf-8');
mb_internal_encoding('UTF-8');
$fpath="folder";
$d=dir($fpath);
while (False !== ($a = $d->read()))
{
if ($a != '.' and $a != '..')
{
$npath=$fpath.'/'.$a;
$data=file_get_contents($npath);
file_put_contents('tempfolder/'.$a, $data);
}
}
Run Code Online (Sandbox Code Playgroud)
如何以utf-8编码保存文件?
我在我的OSX上有一个PHP项目,它是在latin1 -encoding中.现在我需要将文件转换为UTF8.我不是一个shell编码器,我尝试过从互联网上找到的东西:
mkdir new
for a in `ls -R *`; do iconv -f iso-8859-1 -t utf-8 <"$a" >new/"$a" ; done
Run Code Online (Sandbox Code Playgroud)
但这不会创建目录结构,它会让我在运行时加载错误.任何人都可以拿出整洁的解决方案吗?
我想用iconv来转换Mac上的文件.目标是从"Windows ANSI"转到"Windows Notepad保存的任何内容,如果你告诉它使用UFT8".
这就是我要的:
anders-johansen-privats-macbook-pro:test andersprivat$ file names.csv
names.csv: UTF-8 Unicode (with BOM) text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)
这是我使用的:
iconv -f CP1252 -t UTF-8 names.csv > names.utf8.csv
Run Code Online (Sandbox Code Playgroud)
这就是我得到的(不是我想要的):
file names.utf8.csv
names.utf8.csv: UTF-8 Unicode text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)
我如何获得BOM?
我没有看到任何违法行为 - 对可能出现的问题提出任何建议?
if (strtolower($matches[1]) != 'utf-8') {
var_dump($matches[1]);
$xml = iconv($matches[1], 'utf-8', $xml);
$xml = str_replace('encoding="'.$matches[1].'"', 'encoding="utf-8"', $xml);
}
Run Code Online (Sandbox Code Playgroud)
下面是我的调试/错误
string(12) "windows-1252"
Notice (8): iconv() [http://php.net/function.iconv]: Detected an illegal character in input string [APP/models/sob_form.php, line 16]
Run Code Online (Sandbox Code Playgroud)
我已经验证上面的代码确实是第16行
我还是不明白是怎么iconv运作的.
例如,
$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
Run Code Online (Sandbox Code Playgroud)
我明白了
注意:iconv()[function.iconv]:检测到输入字符串中的非法字符...
$string = "Löic"; 要么 $string = "René";
我明白了
注意:iconv() [function.iconv]: 在输入字符串中检测到不完整的多字节字符.
我一无所获 $string = "&";
我需要将两组不同的输出存储在数据库表的两个不同列中,
我需要转换Löic & René到Loic & Rene清洁网址的目的.
我需要保持原样 - Löic & René因为Löic & René只有htmlentities($string, ENT_QUOTES);在我的html页面上显示它们时才转换它们.
我尝试了下面的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', …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用R中的tm包来执行一些文本分析.我绑了以下内容:
require(tm)
dataSet <- Corpus(DirSource('tmp/'))
dataSet <- tm_map(dataSet, tolower)
Error in FUN(X[[6L]], ...) : invalid input 'RT @noXforU Erneut riesiger (Alt-)?lteppich im Golf von Mexiko (#pics vom Freitag) http://bit.ly/bw1hvU http://bit.ly/9R7JCf #oilspill #bp' in 'utf8towcs'
Run Code Online (Sandbox Code Playgroud)
问题是某些字符无效.我想从R中或在导入文件进行处理之前从分析中排除无效字符.
我尝试使用iconv将所有文件转换为utf-8并排除任何无法转换为的内容,如下所示:
find . -type f -exec iconv -t utf-8 "{}" -c -o tmpConverted/"{}" \;
Run Code Online (Sandbox Code Playgroud)
正如在此指出的那样使用iconv将latin-1文件批量转换为utf-8
但我仍然得到同样的错误.
我很感激任何帮助.
我正在尝试将MailCore编译成我正在制作的iOS应用程序,并且链接器一直在抱怨libiconv没有被链接.至少这是我认为它正在抱怨的.这是它吐出来的:
Undefined symbols for architecture i386:
"_iconv", referenced from:
_mail_iconv in libmailcore.a(charconv.o)
"_iconv_open", referenced from:
_charconv in libmailcore.a(charconv.o)
_charconv_buffer in libmailcore.a(charconv.o)
"_iconv_close", referenced from:
_charconv in libmailcore.a(charconv.o)
_charconv_buffer in libmailcore.a(charconv.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
(这是为模拟器构建的.为我的iPhone构建会产生同样的错误,但是s/i386/armv7/).
我已经尝试添加libiconv.dylib"Link Binary with Libraries",但它根本不会改变错误.
知道这里有什么不对吗?我一直在尝试谷歌这个错误,但我找不到任何有关如何链接在libiconv的信息.既然它是iOS SDK的一部分,你会认为我不需要自己编译它吗?
iconv函数有时会给我一个错误:
Notice:
iconv() [function.iconv]:
Detected an incomplete multibyte character in input string in [...]
Run Code Online (Sandbox Code Playgroud)
有没有办法在将数据输入到无线电之前检测到utf-8字符串中存在非法字符?