标签: iconv

如何从PHP字符串中的字符中删除重音?

我试图从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)

我在网上找到的所有内容都表明设置语言环境将解决这个问题,但我已经这样做了.我已经检查了以下细节:

  1. 我正在设置的语言环境由服务器支持(包含在生成的列表中locale -a)
  2. 服务器的iconv版本(包括在生成的列表中)支持源和目标编码(UTF-8和ASCII iconv -l)
  3. 输入字符串是UTF-8编码的(使用PHP mb_check_encoding函数验证,如mercator答案中所建议的那样)
  4. 呼叫setlocale成功(返回'en_US.utf8'而不是FALSE)

问题的原因:

服务器正在使用iconv的错误实现.它有glibc版本而不是所需的libiconv版本.

请注意,某些系统上的iconv功能可能无法正常工作.在这种情况下,安装GNU libiconv库是个好主意.它最有可能最终得到更一致的结果.
- PHP手册对iconv的介绍

有关PHP使用的iconv实现的详细信息包含在phpinfo函数的输出中.

(我无法使用正在为此项目工作的服务器上的正确iconv库重新编译PHP,因此下面我接受的答案是在没有iconv支持的情况下删除重音的最有用的答案.)

php iconv

81
推荐指数
10
解决办法
12万
查看次数

强制编码从US-ASCII到UTF-8(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的一个子集......

http://www.linuxquestions.org/questions/linux-software-2/iconv-us-ascii-to-utf-8-or-iso-8859-15-a-705054/

引用:

在引入非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 character-encoding iconv

55
推荐指数
4
解决办法
15万
查看次数

如何以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编码保存文件?

php encoding utf-8 iconv mbstring

45
推荐指数
4
解决办法
14万
查看次数

使用iconv将latin-1文件批量转换为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)

但这不会创建目录结构,它会让我在运行时加载错误.任何人都可以拿出整洁的解决方案吗?

shell character-encoding iconv

32
推荐指数
7
解决办法
7万
查看次数

iconv:使用BOM从Windows ANSI转换为UTF-8

我想用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?

unicode iconv

29
推荐指数
1
解决办法
5万
查看次数

iconv - 检测到输入字符串中的非法字符

我没有看到任何违法行为 - 对可能出现的问题提出任何建议?

    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行

php iconv

29
推荐指数
4
解决办法
9万
查看次数

PHP:使用iconv处理特殊字符

我还是不明白是怎么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 = "&";

我需要将两组不同的输出存储在数据库表的两个不同列中,

  1. 我需要转换Löic & RenéLoic & Rene清洁网址的目的.

  2. 我需要保持原样 - 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)

php special-characters iconv

28
推荐指数
2
解决办法
7万
查看次数

'utf8towcs'中的r tm包无效输入

我正在尝试使用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

但我仍然得到同样的错误.

我很感激任何帮助.

r utf-8 text-mining iconv

27
推荐指数
6
解决办法
4万
查看次数

libiconv没有链接到iOS项目

我正在尝试将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的一部分,你会认为我不需要自己编译它吗?

xcode linker iconv ios

25
推荐指数
2
解决办法
3万
查看次数

如何在PHP中检测格式错误的utf-8字符串?

iconv函数有时会给我一个错误:

Notice:
iconv() [function.iconv]:
Detected an incomplete multibyte character in input string in [...]
Run Code Online (Sandbox Code Playgroud)

有没有办法在将数据输入到无线电之前检测到utf-8字符串中存在非法字符?

php encoding utf-8 iconv

22
推荐指数
1
解决办法
3万
查看次数