【问题标题】:PHP Unicode str_replace Shows Up BlankPHP Unicode str_replace 显示为空白
【发布时间】:2013-07-26 20:57:50
【问题描述】:

我正在创建一个简单的网页,可以在我正在制作的语言的字母之间进行翻译。

它是这样工作的:

PHP 页面检查是否有罗马字母“x”并将其替换为我的语言对应的西里尔字母。它工作正常,但在我完成添加所有字母后,它停止工作。现在输出显示为空白。

这是我的代码:

<?php
header('content-type: text/html;charset=utf8');
mb_language('uni');
mb_internal_encoding('UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/font/stylesheet.css"/>
<title>Roman Corstek To Cyrillic Corstek</title>
</head>
<body style="font-family: 'dejavusans', sans-serif">
<h1>Roman Corstek To Cyrillic Corstek</h1>
<p>This webpage uses the font 'DejaVu Sans', unless your browser does not support web fonts (all modern web browsers do) because it renders Cyrillic Corstek Glyphs the best, and because it's free and doesn't come with a restrictive <a href="http://www.fontsquirrel.com/license/DejaVu-Sans">license</a>. If you would like to download a copy for yourself click <a href="http://www.fontsquirrel.com/fonts/DejaVu-Sans">here</a>.</p>
<p>Enter your roman text below:</p>
<form action="cyrillic-roman.php">
<textarea cols="50" rows="10" name="roman">
</textarea>
<br/>
<input type="submit">
</form>
<?php
if($_GET['roman'] != "")
{
?>
<h2>Conversion:</h2>
<p><b>You entered:</b></p>
<p><?php echo $_GET['roman']; ?></p>
<p><b>Which in the Cyrillic Corstek Alphabet is:</b></p>
<p>
<?php
$output = $_GET['roman'];

//A With Macron
$output = str_replace("Ā", "Ă", $output);
$output = str_replace("ā", "ă", $output);

//B
$output = str_replace("B", "Б", $output);
$output = str_replace("b", "б", $output);

//V
$output = str_replace("V", "В", $output);
$output = str_replace("v", "в", $output);

//G
$output = str_replace("G", "Г", $output);
$output = str_replace("g", "г", $output);

//D
$output = str_replace("D", "Д", $output);
$output = str_replace("d", "д", $output);

//Œ
$output = str_replace("Œ", "Ё", $output);
$output = str_replace("œ", "ё", $output);

//Ž
$output = str_replace("Ž", "Ж", $output);
$output = str_replace("ž", "ж", $output);

//Í
$output = str_replace("Í", "И", $output);
$output = str_replace("í", "и", $output);

//J
$output = str_replace("J", "Й", $output);
$output = str_replace("j", "й", $output);

//K
$output = str_replace("K", "К", $output);
$output = str_replace("k", "к", $output);

//L
$output = str_replace("L", "Л", $output);
$output = str_replace("l", "л", $output);

//M
$output = str_replace("M", "М", $output);
$output = str_replace("m", "м", $output);

//N
$output = str_replace("N", "Н", $output);
$output = str_replace("n", "н", $output);

//Ó
$output = str_replace("Ó", "Ŏ", $output);
$output = str_replace("ó", "ŏ", $output);

//E
$output = str_replace("E", "Э", $output);
$output = str_replace("e", "э", $output);

//Ŋ
$output = str_replace("Ŋ", "Ң", $output);
$output = str_replace("ŋ", "ң", $output);

//Ñ
$output = str_replace("Ñ", "Н̆", $output);
$output = str_replace("ñ", "н̆", $output);

//P
$output = str_replace("P", "П", $output);
$output = str_replace("p", "п", $output);

//R
$output = str_replace("R", "Р", $output);
$output = str_replace("r", "р", $output);

//Ů
$output = str_replace("Ů", "У", $output);
$output = str_replace("ů", "у", $output);

//F
$output = str_replace("F", "Ф", $output);
$output = str_replace("f", "ф", $output);

//S
$output = str_replace("S", "Ц", $output);
$output = str_replace("s", "ц", $output);

//Č
$output = str_repalce("Č", "Ч", $output);
$output = str_replace("č", "ч", $output);

//Š
$output = str_replace("Š", "Ш", $output);
$output = str_replace("š", "ш", $output);

//H
$output = str_replace("H", "Һ", $output);
$output = str_replace("h", "һ", $output);

//Þ
$output = str_replace("Þ", "Ө", $output);
$output = str_replace("þ", "ө", $output);

//Q
$output = str_replace("Q", "Қ", $output);
$output = str_replace("q", "қ", $output);

//U
$output = str_replace("U", "Ұ", $output);
$output = str_replace("u", "ұ", $output);

//W
$output = str_replace("W", "Ю", $output);
$output = str_replace("w", "ю", $output);

//Ď
$output = str_replace("Ď", "Ь", $output);
$output = str_replace("ď", "ь", $output);

//Ť
$output = str_replace("Ť", "Ъ", $output);
$output = str_replace("ť", "ъ", $output);

//Ī
$output = str_replace("Ī", "V", $output);
$output = str_replace("ī", "v", $output);

//É
$output = str_replace("É", "Ѣ", $output);
$output = str_repalce("é", "ѣ", $output);

//Y
$output = str_replace("Y", "Е", $output);
$output = str_replace("y", "е", $output);

//Ğ
$output = str_replace("Ğ", "Җ", $output);
$output = str_repalce("ğ", "җ", $output);

//Z
$output = str_replace("Z", "З", $output);
$output = str_replace("z", "з", $output);





echo $output;
?>
<?php
}
?>\
</body>
</html>

我做错了什么?

【问题讨论】:

  • 不知道您的问题出在哪里,但我建议您将数组中的搜索/替换值传递给str_replace() - 这将消除重复执行此功能的需要。至于您的实际问题,您是否尝试过调试以查看您对 $output 的值与您的预期有何不同?

标签: php string unicode


【解决方案1】:

您使用函数str_repalce 而不是str_replace 来表示字母Č

只要修正你的错字,它就会再次起作用。


为了减少您的代码大小(str_replace 也接受数组):

$output = str_replace(array("Ā", "ā", ...), array("Ă", "ă", ...), $output);

下次:写在你的php代码的顶部:

ini_set("display_errors", "On");
error_reporting(-1);

这将帮助您发现错误。

【讨论】:

    【解决方案2】:

    与其多次使用str_replace,不如对所有字符使用一次strtr

    $from = "ĀāBbVvGgDdŒœŽžÍíJjKkLlMmNnÓóEeŊŋPpRrŮůFfSsČ芚HhÞþQqUuWwĎĪīÉéYyĞğZz";
    $to = "ĂăБбВвГгДдЁёЖжИиЙйКкЛлМмНнŎŏЭэҢңПпРрУуФфЦцЧчШшҺһӨөҚқҰұЮюЬьЪъVvѢѣЕеҖҗЗз";
    $text = strtr($text, $from, $to);
    

    【讨论】:

    • 我想我会在开发西里尔字母 -> 罗马字母转换器时使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2015-10-03
    • 2013-03-03
    • 2019-03-28
    • 2019-03-26
    • 2018-01-23
    • 2015-04-14
    相关资源
    最近更新 更多