- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 Mac OS X 10 上使用 eclipse-php 在 php 中处理一些带有西类牙语文本的文本文件。我将编码设置为 UTF-8,除一个小问题外一切正常。在输出文本文件中,所有 ¡
(倒置的感叹号)都替换为 ��
(两个黑色菱形,问号之间用空格隔开)。其他字符 (¿ñáéíóúü
) 都没有给我带来任何麻烦。我的 Windows Vista 机器也有类似的问题(它将所有 ¡
替换为 é
)。知道为什么这个字符在 UTF-8 中出错以及我该如何修复它吗?
这是我正在使用的代码。我最初没有包括它,因为它太长了,我不确定问题出在哪里。如您所见,我已尝试采纳 shiplu.mokadd.im 的建议,但我仍然收到 � ��
。
<?php
ini_set("auto_detect_line_endings", true);
$sourceH = fopen("MainInput.txt", "r") or die("Can't open MainInput.txt.");
$sourceData = array();
$tracker = 0;
while (!feof($sourceH)){
$sourceData[$tracker] = fgets($sourceH);
$sourceData[$tracker] = preg_split("/\t/", $sourceData[$tracker]);
$tracker++;
}
$i = $tracker--;
$chars_hi = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÜ';
$chars_lo = 'abcdefghijklmnñopqrstuvwxyzáéíóúü';
$characters = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÜabcdefghijklmnñopqrstuvwxyzáéíóúü1234567890'-";
function lowercase($s) {
global $chars_hi, $chars_lo;
return strtr($s, $chars_hi, $chars_lo);
}
$myNewFile = "Processing/Prepared.txt";
$fhNew = fopen($myNewFile, 'w') or die("can't open Prepared\n");
$newText = "";
for ($n = 1; $n < $i; $n++) {
$myFile = $sourceData[$n][1];
$fh = fopen($myFile,'r') or die("can't open file ".$sourceData[$n][1]."\n");
fwrite($fhNew, "\n\nStartFile ".$sourceData[$n][0]."\n\n");
$position = 0;
$speaker = ">>u";
while (!feof($fh)){
$newText = fgets($fh);
$isLast = false;
$isFirst = true;
$new = "";
if (mb_strpos($newText, ">> i") !== false or mb_strpos($newText, ">>i") !== false or mb_strpos($newText, ">i") !== false or mb_strpos($newText, "> i") !== false) {
$speaker = ">>i";
}
elseif (mb_strpos($newText, ">> s") !== false or mb_strpos($newText, ">>s") !== false or mb_strpos($newText, ">s") !== false or mb_strpos($newText, "> s") !== false) {
$speaker = ">>s";
}
for ($in = 0; $in < mb_strlen($newText); $in++) {
if (mb_strpos($characters, $newText[$in]) !== false) {
if ($isFirst == true) {
$new = $new." ".$newText[$in];
$isFirst = false;
$isLast = true;
}
else {
$new = $new.$newText[$in];
}
}
elseif ($isLast == true) {
$isLast = false;
$isFirst = true;
$new = $new." ".($in + $position)." ".$speaker." ".$newText[$in];
}
else {
$new = $new.$newText[$in];
}
}
$position += mb_strlen($newText);
$newText = $new;
$newText = lowercase($newText);
fwrite($fhNew, $newText."\n");
}
fclose($fh);
}
fclose($fhNew);
?>
最佳答案
你不能做这样的事情:
$new = $new." ".$newText[$in];
具体来说,$newText[$in]
。那是字节级访问,但是当使用 UTF-8 时,字符由多个字节组成。因此,当您像这样破解和削减字节时,您会将属于一起的 UTF-8 字节分开,从而产生 �
。
例如,运行此 PHP 脚本(在文本编辑器中保存为 UTF-8):
<?php
header("Content-Type: text/html; charset=UTF-8");
$text = "ä";
echo $text[0] . " " . $text[1];
结果是���
。
您必须修复您对字符串进行 []
访问的所有代码。您可以将 $string[$i]
替换为 mb_substr( $string, $i, 1, "UTF-8");
此外,您是否将 mb_internal_encoding
设置为 "UTF-8"
?否则,当您在没有显式编码的情况下调用 mb_*
函数时,它很可能不会默认为 UTF-8。
我还建议在自定义 lowercase
函数上使用类似 mb_convert_case($str, MB_CASE_LOWER, "UTF-8");
的函数。
关于php - 菱形中的两个问号而不是倒置的感叹号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13960620/
这个问题在这里已经有了答案: When to use generic methods and when to use wild-card? (9 个回答) 关闭 4 年前。 我试图理解为什么我们需要
我试图编写一个简单的 C 程序来检查路径名是否具有“.jpg”或“.jpeg”后缀。这是我的程序: #include #include #include regex_t regex; stati
我需要使用以下 URL 重定向传入请求: http://mywebsite.com/abc/mapserv.exe?map=123 到 http://mywebsite.com/abc/mapserv
当从我的应用程序插入一些中文字符时,它们会被写入数据库为“???”。不用说,在内置的命令行 mysql 客户端中一切都可以正常工作。 连接字符串: --user-db-uri = jdbc:mysql
您如何定义验证方法?例子:包括?甚至?奇怪? >> 2.odd? => false >> 6.even? => true >> 最佳答案 与您定义任何其他函数的方式相同 - 问号是函数名称的一部分:
我有一个字符串 $name = "name1?name2?name3?name4"; 我想修改这个变量为 $name2 = "name1/name2/name3/name4"; 使用 PHP preg
我已经搜索了对此的一种解释,但没有找到一种解释。在Prolog谓词的描述中,有时在变量名之前的问号,加号和减号是什么意思? 例: predicate(?Variable1,+Variable2,-Va
在Kotlin中,如果我们将类成员声明为 var 和 nullable 类型,则编译器不允许我们运行成员函数,尽管我们在调用函数之前放置了if语句,因为编译器无法保证该成员在针对null进行检查之后并
我想使用 JDBC 向表中插入一行。但是表有大量列,所以我不想将所有列指定到语句中。还有另一种指定列值的方法吗? INSERT INTO TABLE_NAME VALUES(?, ?, ?, ...,
这是我的应用程序崩溃时看到的(没有明显的原因,有时在启动时,有时在以后)。 我该怎么办? 最佳答案 在文件的两个版本中都更改了一行代码的差异被视为冲突,并且其指示符是一个问号。您必须指定解决所有冲突的
我正在尝试在 SpringData native 查询中使用 Postgres jsonb 字符串存在运算符。 SpringData 方法示例: @Query(value = "SELECT t.id
我从另一个应用程序传递了以下字符串。 2�4�9� (2�4�9�) 我想从上面的字符串中删除问号 ascii 字符。 我该怎么做? 最佳答案 根据这个Uni
我在 Android Activity 的 TextView 中遇到重音字符问题。渲染显示问号而不是字符“è”和“à”。流程是:从网络资源中获取一个 midi 文件 --> 提取歌词 --> 将歌词放
有什么办法可以防止'?'在 HTML/CSS 中被视为空白?这是默认行为,还是我做错了什么? 我有一个包含很长 URL 的 div(长度是动态的)。我希望 URL 将问号视为任何其他字符,而不是在该字
我见过这样的代码片段: export interface IUser { email?: string; firstName?: string; lastName?: stri
我正在从我的数据库中获取包含希伯来语单词的数据。然后我从 ResultSet 中获取这些数据并将其放入一个字符串中,然后将其放入一个 JSONObject 中。 代码如下: response.setC
这个问题在这里已经有了答案: What is an optional value in Swift? (15 个答案) 关闭 8 年前。 在 Swift 编程中,我发现了一些带有对象的问号。 var
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Save Data in Arabic in MySQL database 我在使用 PHP 从 MYSQL 数
所以我在想,为了在控制台应用程序中实现这样的功能,在函数名称末尾附加一个问号将倒出它的文档字符串,我可能会使用像元类这样的功能,其中在定义/导入时,我将复制所有模块成员名称并生成新的名称,仅用于输入文
我有一个带有一堆标志(静态图像)的表单,每个标志下方都有一个勾选框。用户选择复选框以允许他们使用特定语言。在设计时,我为每种语言设置了对应的本地化复选框标题,在此示例中为“Español”(西类牙语)
我是一名优秀的程序员,十分优秀!