我认为没有任何违法行为 - 对可能出现的问题提出任何建议?
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);
}
以下是我的调试/错误
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]
我已经确认上面的代码确实是第16行
答案 0 :(得分:30)
但是,如果您使用了接受的答案,如果输入字符串中的字符无法音译,您仍会收到PHP通知:
<?php
$cp1252 = '';
for ($i = 128; $i < 256; $i++) {
$cp1252 .= chr($i);
}
echo iconv("cp1252", "utf-8//TRANSLIT", $cp1252);
PHP Notice: iconv(): Detected an illegal character in input string in CP1252.php on line 8
Notice: iconv(): Detected an illegal character in input string in CP1252.php on line 8
所以你应该使用IGNORE,它将忽略不能音译的内容:
echo iconv("cp1252", "utf-8//IGNORE", $cp1252);
答案 1 :(得分:27)
非法字符不在$matches[1]
,而在$xml
尝试
iconv($matches[1], 'utf-8//TRANSLIT', $xml);
向我们展示输入字符串对于更好的答案会很好。
答案 2 :(得分:4)
非常小心,问题可能来自多字节编码,并且使用了不合适的PHP函数......
对我来说就是这种情况,我花了一段时间才弄明白。
例如,我使用utf8mb4 从MySQL获取字符串(现在非常常见,用于编码表情符号):
$formattedString = strtolower($stringFromMysql);
$strCleaned = iconv('UTF-8', 'utf-8//TRANSLIT', $formattedString); // WILL RETURN THE ERROR 'Detected an illegal character in input string'
问题不在
iconv()
,而在于strtolower()
在这种情况下。
适当的方法是使用多字节字符串函数 mb_strtolower()
而不是 strtolower()
$formattedString = mb_strtolower($stringFromMysql);
$strCleaned = iconv('UTF-8', 'utf-8//TRANSLIT', $formattedString); // WORK FINE
答案 3 :(得分:4)
iconv('UTF-8', 'ASCII//TRANSLIT', 'é@ùµ$`à');
// "e@uu$`a"
iconv('UTF-8', 'ASCII//IGNORE', 'é@ùµ$`à');
// "@$`"
iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', 'é@ùµ$`à');
// "e@uu$`a"
iconv('UTF-8', 'ASCII//TRANSLIT', 'é@ùµ$`à');
// PHP Notice: iconv(): Detected an illegal character
iconv('UTF-8', 'ASCII//IGNORE', 'é@ùµ$`à');
// "@$`"
iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', 'é@ùµ$`à');
// "e@u$`a"
iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', Transliterator::create('Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC')->transliterate('é@ùµ$`à'))
// "e@uu$`a" -> same as PHP 7.2
答案 4 :(得分:0)
这个波纹管解决方案对我有用
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = 'https://www.pro-football-reference.com/years/2020/draft.htm'
html = urlopen(url)
soup = BeautifulSoup(html, "lxml")
table = soup.find('div', class_='table_outer_container')
答案 5 :(得分:-1)
我找到了一个解决方案:
echo iconv('UTF-8', 'ASCII//TRANSLIT', utf8_encode($string));
使用utf8_encode()