【问题标题】:Detecting hard coded label text in PHP application检测 PHP 应用程序中的硬编码标签文本
【发布时间】:2012-03-27 03:47:12
【问题描述】:

有没有办法检测在 PHP 应用程序中可能需要被标签替换的硬编码标签文本?我不仅在谈论 PHP 文件,还谈论 javascript、xml 文件和 SMARTY/TWIG 模板。多语言应用程序中有标准程序吗?

【问题讨论】:

  • 文字就是文字。您可以str_replace it、preg_replace it 或使用其他几个类似的功能来使用它。比如看我的回答here
  • 认为可能存在某种“phpmd 样式”规则,它只识别文本(docblock 和内联注释除外)并显示需要通过任何类型的翻译处理的潜在文本。

标签: php javascript label static-analysis template-engine


【解决方案1】:

对于 PHP,您可以使用 token_get_all() 遍历模板文件。

您会查看T_STRING 令牌,然后检查它们是否与占位符的格式不同。例如:“全部大写”或类似的东西。


对于 xml,这几乎是相同的处理,遍历节点并检查是否有任何文本内容在您只期望占位符的地方飞来飞去。

【讨论】:

    【解决方案2】:

    我们的搜索引擎是一种用于在大型代码库中进行高效搜索的工具,它对语言的词法结构进行索引以加快搜索速度。因此,它比 grep 更快,并且允许就这些语言词位进行更细微的查询。

    查询是一系列具有各种约束的词位的形式。有人可能会写一个查询:

       I=*foo* '.' S=*hello
    

    含义:“找到一个包含'foo'的标识符,后跟一个连接运算符,然后是一个以字母'hello'结尾的文字字符串。对于PHP,通用词位S代表所有字符串类型的文字( squoted 字符串、dquoted 字符串、heredocs 等;您可以根据需要专门搜索它们)。因为搜索引擎理解词法语法,它不会被插入的空格、换行符或 cmets 混淆,因此您不必知道布局才能找到它。(如果你坚持,它会找到带有约束的注释标记)。

    你不必设置约束:

       I=*foo* '.' S
    

    查找任何标识符点字符串组合。

    查询

       S
    

    本身直接回答了 OP 的“文字字符串在哪里?”的问题。任何类型。

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 1970-01-01
      • 2016-03-22
      • 2020-12-26
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2017-07-06
      • 2010-10-05
      相关资源
      最近更新 更多