【问题标题】:How do I modify the output of a script with php?如何使用 php 修改脚本的输出?
【发布时间】:2011-01-06 12:54:37
【问题描述】:

也许这是一个愚蠢的问题,但我有这个脚本:

<script language="javascript">
document.write('<a class="white-link" href="?s=' + geoip_city() + '">¿Estás en ' + geoip_city() +'?</a>');
</script>

我只是想使用 strtr 删除“geoip_city()”的所有字符的重音。通常我知道该怎么做,但这次我不太确定,因为它是一个脚本。我总是用它来去除重音:

<?php
$text = "    ";
$trans = array("á" => "a", "é" => "e", "í" => "i", "ó" => "o", "ú" => "u");
echo strtr($text, $trans);
?>

我该怎么做?

如果不清楚,请询问。

非常感谢

【问题讨论】:

  • geoip_city() 是 javascript 函数吗?如果是这样,你需要在javascript中重新实现你的翻译功能,这并不难。
  • 谢谢,我现在更接近了。这是一个wordpress插件,我会尝试搜索代码。我还有一个短代码“[mmjs-city]”来检索城市。我可以通过 PHP 设置样式吗?还是我也必须更改脚本?

标签: php javascript scripting


【解决方案1】:

您需要在 javascript 中重新实现(至少是基本版本)strtr PHP 函数。该函数相当简单,您接受一个将原始值映射到新值的转换表,然后将原始值的所有实例替换为其各自的新值。

function trans(text, table) {
    for(var i = 0; i < table.length; i++) {
        var entry = table[i];
        text = text.replace(new RegExp(entry[0], 'g'), entry[1]);
    }

    return text;
}

你可以像这样直接使用它:

var $trans = [
    ['a','b'],
    ['c','d']
];

alert(trans('acdc cats pajamas', $trans));

就像我说的,trans 函数相当简单。它遍历提供的转换表中的每个条目,并将条目中的第一个元素转换为正则表达式。将其转换为正则表达式(使用new RegExp)的原因是'g' 选项允许您替换每个匹配项,而不仅仅是找到的第一个匹配项。

以及在您的确切情况下使用它的示例方法:

<script>
function trans(text, table) {
    for(var i = 0; i < table.length; i++) {
        var entry = table[i];
        text = text.replace(new RegExp(entry[0], 'g'), entry[1]);
    }

    return text;
}

var trans_table = [
    ["á", "a"],
    ["é", "e"],
    ["í", "i"],
    ["ó", "o"],
    ["ú", "u"]
];

var geoip_city_trans = trans(geoip_city(), trans_table);

document.write('<a class="white-link" href="?s=' + geoip_city_trans + '">¿Estás en ' + geoip_city_trans +'?</a>');

</script>

注意:我建议将转换表和实际的 trans 函数放在包含在此页面中的外部脚本中,而不是在要打印锚点的位置定义它。

【讨论】:

  • 感谢您提供真正完整的答案!
  • @Liso22:没问题。只是想为 SO 尽我的一份力。
猜你喜欢
  • 2020-03-04
  • 1970-01-01
  • 2015-04-26
  • 2021-07-25
  • 2011-03-24
  • 2014-07-03
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多